Yanıtlar:
İşte herhangi bir harici komut dosyası veya yardımcı program gerektirmeyen ve işlemi Valgrind veya time gibi başka bir program aracılığıyla başlatmanızı gerektirmeyen bir astar, böylece zaten çalışan herhangi bir işlem için kullanabilirsiniz:
grep VmPeak /proc/$PID/status
( $PID
ilgilendiğiniz sürecin PID'siyle değiştirin )
[ Düzenle : Ubuntu üzerinde çalışır 14.04: /usr/bin/time -v command
Tam yolu kullandığınızdan emin olun.]
Görünüşe göre /usr/bin/time
size bu bilgileri veriyor gibi görünüyor -v
(bu Ubuntu 8.10 açıktır). Maximum resident set size
Aşağıdaki örneğe bakınız:
$ / usr / bin / time -v ls / .... Zamanlanan komut: "ls /" Kullanıcı süresi (saniye): 0.00 Sistem zamanı (saniye): 0.01 Bu işin aldığı CPU yüzdesi: 250% Geçen (duvar saati) süresi (s: dd: ss veya m: ss): 0: 00.00 Ortalama paylaşılan metin boyutu (kbyte): 0 Ortalama paylaşılmamış veri boyutu (kbyte): 0 Ortalama yığın boyutu (kbyte): 0 Ortalama toplam boyut (kbyte): 0 Maksimum yerleşik ayar boyutu (kbyte): 0 Ortalama yerleşik set büyüklüğü (kbyte): 0 Büyük (G / Ç gerektiren) sayfa hataları: 0 Küçük (bir çerçeveyi geri almak) sayfa hataları: 315 Gönüllü bağlam anahtarları: 2 İstemsiz bağlam anahtarları: 0 Takas: 0 Dosya sistemi girişleri: 0 Dosya sistemi çıktıları: 0 Soket mesajları gönderildi: 0 Alınan soket mesajları: 0 Teslim edilen sinyaller: 0 Sayfa boyutu (bayt): 4096 Çıkış durumu: 0
/bin/time -v
çözer.
time -l
, benzer çıktılar verir.
(Bu zaten cevaplanmış, eski bir soru .. ama sadece kayıt için :)
Yang'ın senaryosundan ilham aldım ve memusg adlı bu küçük aracı buldum . Kısa yaşam süreçlerinin üstesinden gelmek için örnekleme oranını 0,1'e yükselttim. Tek bir süreci izlemek yerine, süreç grubunun rss toplamını ölçtüm. (Evet, birlikte çalışan birçok ayrı program yazıyorum) Şu anda Mac OS X ve Linux'ta çalışıyor. Kullanım şuna benzer olmalıdır time
:
memusg ls -alR /> / dev / null
Sadece şu an için zirveyi gösteriyor, ancak diğer (kaba) istatistikleri kaydetmek için hafif uzantılarla ilgileniyorum.
Ciddi bir profil oluşturmaya başlamadan önce sadece göz atmak için bu kadar basit bir araca sahip olmak iyidir.
ps -o rss=
olduğu ile gösterilen değerleri izler .
Valgrind tek astarlı:
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
Bir işlemdeki tüm belleği ölçmek için --pages-as-yığın olarak kullanıldığına dikkat edin. Daha fazla bilgi burada: http://valgrind.org/docs/manual/ms-manual.html
time
, Senden ayrılıyorum.
valgrind --massif
. ms_print
Bununla birlikte gelen aleti kullanışlı çıktı için de kullanabilirsiniz (zaman içinde ascii kullanım çizelgeleri dahil)
time
, gibi bir komutta en az 10 kat daha fazla zaman alır ls
.
Linux'ta:
Kullanın /usr/bin/time -v <program> <args>
ve " Maksimum yerleşik ayar boyutu " için arama yapın.
(Bash time
yerleşik komutuyla karıştırılmamalıdır! Bu yüzden tam yolu kullanın , /usr/bin/time
)
Örneğin:
> /usr/bin/time -v ./myapp
User time (seconds): 0.00
. . .
Maximum resident set size (kbytes): 2792
. . .
BSD'de, MacOS:
/usr/bin/time -l <program> <args>
" Maksimum yerleşik ayar boyutu " araması yapın, kullanın :
>/usr/bin/time -l ./myapp
0.01 real 0.00 user 0.00 sys
1440 maximum resident set size
. . .
sudo apt-get install time
Belki (gnu) zamanı (1) zaten istediğinizi yapar. Örneğin:
$ /usr/bin/time -f "%P %M" command
43% 821248
Ancak diğer profil oluşturma araçları, aradığınız şeye bağlı olarak daha doğru sonuçlar verebilir.
time
kullanırken yerleşik bir komuttur csh
. Tam yolu kullanırsanız, harici komutu çalıştırmanıza izin verir. Bildiğim kadarıyla sadece GNU sürümü format seçeneğini destekliyor.
/ usr / bin / time aslında istediğini yapar. Gibi bir şey.
/ usr / bin / time --format = '(% Xtext +% Ddata% Mmax)'
Ayrıntılar için zamana (1) bakın ...
MacOS Sierra'da:
/usr/bin/time -l commandToMeasure
grep
Belki istediğinizi almak için kullanabilirsiniz .
command time -l
yerine kullanabileceğiniz küçük bir not, /usr/bin/time -l
kabuğunuzun time
yerleşik işlev yerine adlandırılmış bir ikili dosyayı çağırmasına neden olur . (Evet, command
yer tutucu değil, command time
sadece farklı time
.)
İşlem en az birkaç saniye çalışırsa, verilen komut satırını çalıştıracak ve ardından tepe RSS (streyr) ( rss
ilgilendiğiniz diğer özniteliklerin yerine) yazdıracak olan aşağıdaki bash betiğini kullanabilirsiniz . Biraz hafif ve ps
Ubuntu 9.04'e dahil olan (benim için söyleyemem time
) benim için çalışıyor .
#!/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
İşte (diğer cevaplara dayanarak) zaten çalışan bir süreci izleyen çok basit bir komut dosyası. Sadece argüman olarak izlemek istediğiniz sürecin pidiyle çalıştırın:
#!/usr/bin/env bash
pid=$1
while ps $pid >/dev/null
do
ps -o vsz= ${pid}
sleep 1
done | sort -n | tail -n1
Örnek kullanım:
max_mem_usage.sh 23423
Massif kullanın: http://valgrind.org/docs/manual/ms-manual.html
Heaptrack bir GUI ve metin arayüzü olan KDE aracıdır. Daha fazla ayrıntı ve alev grafiği sağladığı için bir işlemin bellek kullanımını anlamanın valgrind'ten daha uygun olduğunu düşünüyorum. Aynı zamanda daha hızlıdır, çünkü valgrind'i daha az kontrol eder. Ve size en yüksek bellek kullanımını sağlar.
Her neyse, rss ve vss'i izlemek yanıltıcıdır çünkü sayfalar paylaşılabilir, bu yüzden memusg
. Ne gerçekten yapmalıyım toplamını izlemek olduğu Pss
içinde /proc/[pid]/smaps
veya kullanım pmap
. GNOME sistem monitörü bunu yapıyordu ama çok pahalıydı.
El yapımı bash betiği ile tekerleği yeniden icat etmek. Hızlı ve temiz.
Benim kullanım durumum: Daha az RAM'e sahip olan ve ağır kullanım altında çalıştığında her kap kullanımının anlık görüntüsünü almak istedim.
#!/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
Örnek çıktı:
2017-10-12 13:29:33:% 30 eşiği ile ücretsiz bellek monitörü çalışıyor ..
2017-10-12 13:29:33: Yeterli boş hafıza mevcut: 69.4567%
2017-10-12 13:30:03: Yeterli boş hafıza mevcut: 69.4567%
2017-10-12 16:47:02: Boş hafıza 18.9387% 30'dan az
özel komut çıktınız
MacOS'ta bunun yerine DTrace'i kullanabilirsiniz. "Instruments" uygulaması bunun için güzel bir GUI, XCode afaik ile geliyor.
'htop' hangi işlemin ne kadar RAM kullandığını görmek için en iyi komuttur .....
daha fazla ayrıntı için http://manpages.ubuntu.com/manpages/precise/man1/htop.1.html
Lütfen soruyu cevapladığınızdan emin olun. Ayrıntıları sağlayın ve araştırmanızı paylaşın!
Üzgünüm, ilk defa buradayım ve sadece soru sorabilirim…
Kullanılan önerilen:
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
sonra:
grep mem_heap_B massif.out
...
mem_heap_B=1150976
mem_heap_B=1150976
...
bu, top
komutun benzer anda gösterilenden çok farklı :
14673 gu27mox 20 0 3280404 468380 19176 R 100.0 2.9 6:08.84 pwanew_3pic_com
Valgrind ölçülen birimler nelerdir ??
/usr/bin/time -v ./test.sh
Asla cevap - Eğer doğrudan çalıştırılabilir beslemek gerekir /usr/bin/time
gibi:
/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