Câu trả lời:
Đây là một lớp lót không yêu cầu bất kỳ tập lệnh hoặc tiện ích bên ngoài nào và không yêu cầu bạn bắt đầu quá trình thông qua một chương trình khác như Valgrind hoặc thời gian, vì vậy bạn có thể sử dụng nó cho bất kỳ quy trình nào đang chạy:
grep VmPeak /proc/$PID/status
(thay thế $PID
bằng PID của quy trình bạn quan tâm)
[ Chỉnh sửa : Hoạt động trên Ubuntu 14.04: /usr/bin/time -v command
Đảm bảo sử dụng đường dẫn đầy đủ.]
Có vẻ như /usr/bin/time
sẽ cung cấp cho bạn thông tin đó, nếu bạn vượt qua -v
(đây là trên Ubuntu 8.10). Xem, ví dụ, Maximum resident set size
dưới đây:
$ / usr / bin / time -v ls / .... Lệnh đang được định thời gian: "ls /" Thời gian của người dùng (giây): 0,00 Thời gian hệ thống (giây): 0,01 Phần trăm CPU công việc này có: 250% Thời gian đã trôi qua (đồng hồ treo tường) (h: mm: ss hoặc m: ss): 0: 00.00 Kích thước văn bản được chia sẻ trung bình (kbytes): 0 Kích thước dữ liệu không chia sẻ trung bình (kbytes): 0 Kích thước ngăn xếp trung bình (kbyte): 0 Tổng kích thước trung bình (kbyte): 0 Kích thước cài đặt thường trú tối đa (kbyte): 0 Kích thước bộ cư dân trung bình (kbytes): 0 Lỗi trang chính (yêu cầu I / O): 0 Lỗi trang (lấy lại khung) nhỏ: 315 Công tắc bối cảnh tự nguyện: 2 Công tắc bối cảnh không tự nguyện: 0 Hoán đổi: 0 Đầu vào hệ thống tệp: 0 Đầu ra hệ thống tệp: 0 Tin nhắn ổ cắm đã gửi: 0 Tin nhắn ổ cắm nhận được: 0 Tín hiệu được gửi: 0 Kích thước trang (byte): 4096 Trạng thái thoát: 0
/bin/time -v
giải quyết nó
time -l
trên MacOS, cho đầu ra tương tự.
(Đây là một câu hỏi đã được trả lời, câu hỏi cũ .. nhưng chỉ dành cho hồ sơ :)
Tôi đã được truyền cảm hứng từ kịch bản của Yang, và đã đưa ra công cụ nhỏ này, được đặt tên là memusg . Tôi chỉ đơn giản là tăng tỷ lệ lấy mẫu lên 0,1 để xử lý nhiều quá trình sống ngắn. Thay vì theo dõi một quy trình đơn lẻ, tôi đã thực hiện nó đo tổng rss của nhóm quy trình. (Vâng, tôi viết rất nhiều chương trình riêng biệt hoạt động cùng nhau) Nó hiện đang hoạt động trên Mac OS X và Linux. Việc sử dụng phải tương tự như time
:
ghi nhớ ls -alR /> / dev / null
Nó chỉ hiển thị mức cao nhất vào lúc này, nhưng tôi quan tâm đến các tiện ích mở rộng nhẹ để ghi lại các số liệu thống kê (thô) khác.
Thật tốt khi có công cụ đơn giản như vậy chỉ để xem trước khi chúng tôi bắt đầu bất kỳ hồ sơ nghiêm túc nào.
ps -o rss=
trong đó rss là kích thước bộ nhớ thực (bộ thường trú) của quá trình (tính theo đơn vị 1024 byte) từ trang man BSD của tôi.
Valgrind một lớp lót:
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
Lưu ý sử dụng --pages-as-heap để đo tất cả bộ nhớ trong một quy trình. Thêm thông tin ở đây: http://valgrind.org/docs/manual/ms-manual.html
time
, Tôi đang rời xa bạn.
valgrind --massif
. Bạn cũng có thể sử dụng ms_print
công cụ đi kèm với nó cho đầu ra tiện dụng (bao gồm cả biểu đồ sử dụng ascii theo thời gian)
time
mặc dù, mất ít nhất 10 lần thời gian cho một lệnh như thế nào ls
.
Trên Linux:
Sử dụng /usr/bin/time -v <program> <args>
và tìm kiếm " Kích thước bộ cư dân tối đa ".
(Không nên nhầm lẫn với lệnh tích hợp Bash time
! Vì vậy, hãy sử dụng đường dẫn đầy đủ , /usr/bin/time
)
Ví dụ:
> /usr/bin/time -v ./myapp
User time (seconds): 0.00
. . .
Maximum resident set size (kbytes): 2792
. . .
Trên BSD, MacOS:
Sử dụng /usr/bin/time -l <program> <args>
, tìm kiếm " kích thước bộ cư dân tối đa ":
>/usr/bin/time -l ./myapp
0.01 real 0.00 user 0.00 sys
1440 maximum resident set size
. . .
sudo apt-get install time
Có lẽ (gnu) thời gian (1) đã làm những gì bạn muốn. Ví dụ:
$ /usr/bin/time -f "%P %M" command
43% 821248
Nhưng các công cụ định hình khác có thể cho kết quả chính xác hơn tùy thuộc vào những gì bạn đang tìm kiếm.
time
là một lệnh tích hợp khi sử dụng csh
. Nếu bạn sử dụng đường dẫn chính xác, nó sẽ cho phép bạn chạy lệnh bên ngoài. Theo tôi biết, chỉ có phiên bản GNU hỗ trợ tùy chọn định dạng.
/ usr / bin / time có thể làm những gì bạn muốn, thực sự. Cái gì đó như.
/ usr / bin / time --format = '(% Xtext +% Ddata% Mmax)'
Xem thời gian (1) để biết chi tiết ...
Trên MacOS Sierra sử dụng:
/usr/bin/time -l commandToMeasure
Bạn có thể sử dụng grep
để lấy những gì bạn muốn có thể.
command time -l
thay vì /usr/bin/time -l
điều đó sẽ khiến shell của bạn thực sự gọi một nhị phân được gọi time
thay vì hàm dựng sẵn. (Vâng, command
không phải là một người giữ chỗ, command time
khác với chỉ time
.)
Nếu quá trình diễn ra trong ít nhất vài giây, thì bạn có thể sử dụng tập lệnh bash sau, nó sẽ chạy dòng lệnh đã cho sau đó in ra để lấy lại RSS đỉnh (thay thế cho rss
bất kỳ thuộc tính nào khác mà bạn quan tâm). Nó hơi nhẹ và nó hoạt động với tôi với ps
Ubuntu 9.04 (mà tôi không thể nói cho 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
Bạn có thể sử dụng một công cụ như Valgrind để làm điều này.
Đây là (dựa trên các câu trả lời khác) một tập lệnh rất đơn giản theo dõi một quá trình đã chạy. Bạn chỉ cần chạy nó với pid của quá trình bạn muốn xem làm đối số:
#!/usr/bin/env bash
pid=$1
while ps $pid >/dev/null
do
ps -o vsz= ${pid}
sleep 1
done | sort -n | tail -n1
Ví dụ sử dụng:
max_mem_usage.sh 23423
Sử dụng Massif: http://valgrind.org/docs/manual/ms-manual.html
Heaptrack là công cụ KDE có giao diện GUI và văn bản. Tôi thấy nó phù hợp hơn valgrind để hiểu cách sử dụng bộ nhớ của một quá trình bởi vì nó cung cấp nhiều chi tiết và hình ảnh ngọn lửa hơn. Nó cũng nhanh hơn bởi vì nó ít kiểm tra valgrind đó. Và nó cung cấp cho bạn việc sử dụng bộ nhớ cao điểm.
Dù sao, theo dõi rss và vss là sai lệch vì các trang có thể được chia sẻ, đó là lý do tại sao memusg
. Những gì bạn thực sự nên làm là theo dõi tổng số Pss
trong /proc/[pid]/smaps
hoặc sử dụng pmap
. Trình giám sát hệ thống Gnome được sử dụng để làm như vậy nhưng nó quá đắt.
Phát minh lại bánh xe, với kịch bản bash làm bằng tay. Nhanh chóng và sạch sẽ.
Trường hợp sử dụng của tôi: Tôi muốn theo dõi một máy linux có ít RAM hơn và muốn chụp ảnh nhanh cho mỗi lần sử dụng container khi nó chạy dưới mức sử dụng nặng.
#!/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
Đầu ra mẫu:
2017-10-12 13:29:33: Chạy màn hình bộ nhớ miễn phí với ngưỡng 30% ..
2017-10-12 13:29:33: Có đủ bộ nhớ trống: 69,4567%
2017-10-12 13:30:03: Có đủ bộ nhớ trống: 69,4567%
2017-10-12 16:47:02: Bộ nhớ miễn phí 18.9387% dưới 30%
đầu ra lệnh tùy chỉnh của bạn
Trên macOS, bạn có thể sử dụng DTrace thay thế. Ứng dụng "Dụng cụ" là một GUI đẹp cho điều đó, nó đi kèm với XCode afaik.
'htop' là lệnh tốt nhất để xem quá trình nào đang sử dụng bao nhiêu RAM .....
để biết thêm chi tiết http://manpages.ubfox.com/manpages/precise/man1/htop.1.html
Hãy chắc chắn để trả lời câu hỏi. Cung cấp chi tiết và chia sẻ nghiên cứu của bạn!
Xin lỗi, tôi lần đầu tiên đến đây và chỉ có thể đặt câu hỏi
Được sử dụng đề xuất:
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
sau đó:
grep mem_heap_B massif.out
...
mem_heap_B=1150976
mem_heap_B=1150976
...
điều này rất khác với những gì top
lệnh hiển thị tại thời điểm tương tự:
14673 gu27mox 20 0 3280404 468380 19176 R 100.0 2.9 6:08.84 pwanew_3pic_com
đơn vị đo từ Valgrind là gì ??
Không /usr/bin/time -v ./test.sh
bao giờ trả lời - bạn phải trực tiếp cung cấp thực thi để /usr/bin/time
thích:
/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