มีเครื่องมือที่จะรันบรรทัดคำสั่งและรายงานยอดการใช้ RAM ทั้งหมดหรือไม่
ฉันจินตนาการถึงสิ่งที่คล้ายคลึงกับ / usr / bin / time
มีเครื่องมือที่จะรันบรรทัดคำสั่งและรายงานยอดการใช้ RAM ทั้งหมดหรือไม่
ฉันจินตนาการถึงสิ่งที่คล้ายคลึงกับ / usr / bin / time
คำตอบ:
ต่อไปนี้เป็นหนึ่งในสายการบินที่ไม่ต้องใช้สคริปต์หรือยูทิลิตี้ภายนอกและไม่ต้องการให้คุณเริ่มกระบวนการผ่านโปรแกรมอื่นเช่น Valgrind หรือเวลาดังนั้นคุณสามารถใช้มันสำหรับกระบวนการใด ๆ ที่ทำงานอยู่แล้ว:
grep VmPeak /proc/$PID/status
(แทนที่$PID
ด้วย PID ของกระบวนการที่คุณสนใจ)
[ แก้ไข : ใช้งานได้กับ Ubuntu 14.04: /usr/bin/time -v command
ตรวจสอบให้แน่ใจว่าใช้เส้นทางแบบเต็ม]
ดูเหมือนว่า/usr/bin/time
จะให้ข้อมูลแก่คุณถ้าคุณผ่าน-v
(นี่คือ Ubuntu 8.10) ดูเช่นMaximum resident set size
ด้านล่าง:
$ / usr / bin / time -v ls / .... คำสั่งถูกหมดเวลา: "ls /" เวลาผู้ใช้ (วินาที): 0.00 เวลาระบบ (วินาที): 0.01 เปอร์เซ็นต์ของ CPU ที่งานนี้ได้รับ: 250% เวลาที่ผ่านไป (นาฬิกาแขวนผนัง) (h: mm: ss หรือ m: ss): 0: 00.00 ขนาดข้อความที่แชร์โดยเฉลี่ย (kbytes): 0 ขนาดข้อมูลที่ไม่แชร์โดยเฉลี่ย (kbytes): 0 ขนาดสแต็กเฉลี่ย (kbytes): 0 ขนาดโดยรวมเฉลี่ย (kbytes): 0 ขนาดชุดที่อยู่อาศัยสูงสุด (kbytes): 0 ขนาดชุดที่อยู่อาศัยโดยเฉลี่ย (kbytes): 0 ข้อบกพร่องของหน้าส่วนใหญ่ (ต้องการ I / O): 0 ข้อผิดพลาดของหน้ารอง (เรียกคืนเฟรม): 315 การสลับบริบทโดยสมัครใจ: 2 การสลับบริบทโดยไม่สมัครใจ: 0 สัญญาแลกเปลี่ยน: 0 อินพุตระบบไฟล์: 0 เอาต์พุตระบบไฟล์: 0 ส่งข้อความซ็อกเก็ตแล้ว: 0 ได้รับข้อความซ็อกเก็ต: 0 ส่งสัญญาณ: 0 ขนาดหน้า (ไบต์): 4096 สถานะการออก: 0
/bin/time -v
แก้มัน
time -l
บน MacOS ให้ผลลัพธ์ที่คล้ายกัน
(นี่เป็นคำถามเก่าที่ตอบแล้ว แต่สำหรับบันทึก :)
ผมได้รับแรงบันดาลใจจากสคริปต์ยางของและมาพร้อมกับเครื่องมือขนาดเล็กนี้ชื่อmemusg ฉันเพียงเพิ่มอัตราการสุ่มตัวอย่างเป็น 0.1 เพื่อจัดการกับกระบวนการชีวิตสั้น แทนที่จะติดตามกระบวนการเดียวฉันทำให้มันวัดค่า rss sum ของกลุ่มกระบวนการ (ใช่ฉันเขียนโปรแกรมแยกต่างหากมากมายที่ทำงานร่วมกัน) มันทำงานบน Mac OS X และ Linux การใช้งานจะต้องเหมือนกับของtime
:
memusg ls -alR /> / dev / null
มันแสดงให้เห็นถึงจุดสูงสุดในขณะนี้ แต่ฉันสนใจที่จะขยายเล็กน้อยเพื่อบันทึกสถิติอื่น ๆ (หยาบ)
เป็นเรื่องดีที่มีเครื่องมือง่าย ๆ เพียงแค่ดูก่อนที่เราจะเริ่มการทำโปรไฟล์ที่จริงจัง
ps -o rss=
ที่ rss คือขนาดหน่วยความจำจริง (ชุดที่พักอาศัย) ของกระบวนการ (ในหน่วย 1024 ไบต์)จากหน้า man ของ BSD ของฉัน
Valgrind หนึ่งซับ:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
หมายเหตุการใช้ --pages-as-heap เพื่อวัดหน่วยความจำทั้งหมดในกระบวนการ ข้อมูลเพิ่มเติมที่นี่: http://valgrind.org/docs/manual/ms-manual.html
time
ฉันจะทิ้งคุณไป
valgrind --massif
สำหรับ นอกจากนี้คุณยังสามารถใช้ms_print
เครื่องมือที่มาพร้อมกับมันเพื่อให้ได้ผลลัพธ์ที่สะดวก (รวมถึงแผนภูมิการใช้งาน ASCII เมื่อเวลาผ่านไป)
time
แต่สละเวลาอย่างน้อย 10 ls
ครั้งเพิ่มเติมเกี่ยวกับคำสั่งเช่น
บน Linux:
ใช้/usr/bin/time -v <program> <args>
และมองหา " ขนาดชุดที่อยู่อาศัยสูงสุด "
(เพื่อไม่ให้สับสนกับทุบตีtime
ในตัวคำสั่งดังนั้นใช้เส้นทางแบบเต็ม , /usr/bin/time
)
ตัวอย่างเช่น:
> /usr/bin/time -v ./myapp
User time (seconds): 0.00
. . .
Maximum resident set size (kbytes): 2792
. . .
ใน BSD, MacOS:
ใช้/usr/bin/time -l <program> <args>
มองหา " ขนาดชุดผู้พักอาศัยสูงสุด ":
>/usr/bin/time -l ./myapp
0.01 real 0.00 user 0.00 sys
1440 maximum resident set size
. . .
sudo apt-get install time
บางที (gnu) เวลา (1)ทำสิ่งที่คุณต้องการอยู่แล้ว ตัวอย่างเช่น
$ /usr/bin/time -f "%P %M" command
43% 821248
แต่เครื่องมือทำโปรไฟล์อื่น ๆ อาจให้ผลลัพธ์ที่แม่นยำมากขึ้นโดยขึ้นอยู่กับสิ่งที่คุณกำลังมองหา
time
csh
หากคุณใช้เส้นทางที่แน่นอนมันจะช่วยให้คุณสามารถเรียกใช้คำสั่งภายนอก เท่าที่ฉันรู้เพียงรุ่น GNU รองรับตัวเลือกรูปแบบ
/ usr / bin / time อาจทำในสิ่งที่คุณต้องการจริง ๆ แล้ว สิ่งที่ต้องการ.
/ usr / bin / time --format = '(% Xtext +% Ddata% Mmax)'
ดูเวลา (1) เพื่อดูรายละเอียด ...
ในการใช้งาน MacOS Sierra:
/usr/bin/time -l commandToMeasure
คุณสามารถใช้grep
สิ่งที่คุณต้องการอาจจะ
command time -l
แทน/usr/bin/time -l
ซึ่งจะทำให้เชลล์ของคุณเรียกไบนารีที่เรียกว่าtime
แทนที่จะเป็นฟังก์ชัน builtin (ใช่command
ไม่ใช่ตัวยึดตำแหน่งcommand time
แตกต่างจาก Just time
)
หากกระบวนการทำงานเป็นเวลาอย่างน้อยสองสามวินาทีจากนั้นคุณสามารถใช้สคริปต์ทุบตีต่อไปนี้ซึ่งจะเรียกใช้บรรทัดคำสั่งที่กำหนดจากนั้นพิมพ์ไปที่ stderr RSS สูงสุด (แทนrss
แอตทริบิวต์อื่น ๆ ที่คุณสนใจ) มันค่อนข้างเบาและใช้งานได้ดีสำหรับผมที่ps
รวมอยู่ใน Ubuntu 9.04 (ซึ่งผมพูดไม่ได้time
)
#!/usr/bin/env bash
"$@" & # Run the given command line in the background.
pid=$! peak=0
while true; do
sleep 1
sample="$(ps -o rss= $pid 2> /dev/null)" || break
let peak='sample > peak ? sample : peak'
done
echo "Peak: $peak" 1>&2
time -f '%M' <run_program>
คุณสามารถใช้เครื่องมือเช่นValgrindเพื่อทำสิ่งนี้
นี่คือ (ขึ้นอยู่กับคำตอบอื่น ๆ ) สคริปต์ที่ง่ายมากที่เฝ้าดูกระบวนการทำงานอยู่แล้ว คุณเรียกใช้ด้วย pid ของกระบวนการที่คุณต้องการดูเป็นอาร์กิวเมนต์:
#!/usr/bin/env bash
pid=$1
while ps $pid >/dev/null
do
ps -o vsz= ${pid}
sleep 1
done | sort -n | tail -n1
ตัวอย่างการใช้งาน:
max_mem_usage.sh 23423
Heaptrackเป็นเครื่องมือของ KDE ที่มี GUI และส่วนต่อประสานข้อความ ฉันคิดว่ามันเหมาะสมกว่า valgrind เพื่อทำความเข้าใจการใช้งานหน่วยความจำของกระบวนการเพราะมันให้รายละเอียดเพิ่มเติมและกราฟิค นอกจากนี้ยังเร็วกว่าเพราะจะตรวจสอบ valgrind น้อย และให้การใช้งานหน่วยความจำสูงสุด
อย่างไรก็ตามการติดตาม RSS และ VSS memusg
เป็นความเข้าใจผิดเพราะหน้าสามารถใช้ร่วมกันว่าทำไมว่า สิ่งที่คุณควรทำคือการติดตามผลรวมของPss
ในหรือการใช้งาน/proc/[pid]/smaps
ระบบตรวจสอบของ GNOMEเคยทำมาแล้ว แต่มันแพงเกินไปpmap
การประดิษฐ์วงล้อขึ้นอีกครั้งด้วยสคริปต์ทุบตีที่ทำด้วยมือ รวดเร็วและสะอาด
กรณีการใช้งานของฉัน:ฉันต้องการตรวจสอบเครื่อง linux ที่มี RAM น้อยและต้องการถ่ายภาพต่อการใช้คอนเทนเนอร์เมื่อมันทำงานภายใต้การใช้งานหนัก
#!/usr/bin/env bash
threshold=$1
echo "$(date '+%Y-%m-%d %H:%M:%S'): Running free memory monitor with threshold $threshold%.."
while(true)
freePercent=`free -m | grep Mem: | awk '{print ($7/$2)*100}'`
do
if (( $(awk 'BEGIN {print ("'$freePercent'" < "'$threshold'")}') ))
then
echo "$(date '+%Y-%m-%d %H:%M:%S'): Free memory $freePercent% is less than $threshold%"
free -m
docker stats --no-stream
sleep 60
echo ""
else
echo "$(date '+%Y-%m-%d %H:%M:%S'): Sufficient free memory available: $freePercent%"
fi
sleep 30
done
ตัวอย่างผลลัพธ์:
2017-10-12 13:29:33: การเรียกใช้จอภาพหน่วยความจำฟรีที่มีขีด จำกัด 30% ..
2017-10-12 13:29:33: หน่วยความจำว่างที่เพียงพอ: 69.4567%
2017-10-12 13:30:03: มีหน่วยความจำว่างเพียงพอ: 69.4567%
2017-10-12 16:47:02: หน่วยความจำฟรี 18.9387% น้อยกว่า 30%
เอาต์พุตคำสั่งที่กำหนดเองของคุณ
บน macOS คุณสามารถใช้ DTrace แทน แอป "เครื่องมือ" เป็น GUI ที่ดีสำหรับสิ่งนั้นมันมาพร้อมกับ XCode afaik
'htop' เป็นคำสั่งที่ดีที่สุดในการดูว่ากระบวนการใดใช้ RAM เท่าใด .....
สำหรับรายละเอียดเพิ่มเติม http://manpages.ubuntu.com/manpages/precise/man1/htop.1.html
โปรดตอบคำถาม ให้รายละเอียดและแบ่งปันงานวิจัยของคุณ!
ขออภัยฉันมาที่นี่เป็นครั้งแรกและสามารถถามคำถามเท่านั้น ...
แนะนำให้ใช้:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
แล้ว:
grep mem_heap_B massif.out
...
mem_heap_B=1150976
mem_heap_B=1150976
...
สิ่งนี้แตกต่างจากtop
คำสั่งที่แสดงในเวลาเดียวกัน:
14673 gu27mox 20 0 3280404 468380 19176 R 100.0 2.9 6:08.84 pwanew_3pic_com
หน่วยวัดจาก Valgrind คืออะไร?
คำ/usr/bin/time -v ./test.sh
ตอบที่ไม่เคยตอบ - คุณต้องป้อนฟีดที่สามารถเรียกใช้งานได้โดยตรง/usr/bin/time
เช่น:
/usr/bin/time -v pwanew_3pic_compass_2008florian3_dfunc.static card_0.100-0.141_31212_resubmit1.dat_1.140_1.180 1.140 1.180 31212
Command being timed: "pwanew_3pic_compass_2008florian3_dfunc.static card_0.100-0.141_31212_resubmit1.dat_1.140_1.180 1.140 1.180 31212"
User time (seconds): 1468.44
System time (seconds): 7.37
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 24:37.14
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 574844
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 74
Minor (reclaiming a frame) page faults: 468880
Voluntary context switches: 1190
Involuntary context switches: 20534
Swaps: 0
File system inputs: 81128
File system outputs: 1264
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0