답변:
다음은 외부 스크립트 또는 유틸리티가 필요하지 않으며 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 / 시간 -v ls / .... 시간이 초과되는 명령 : "ls /" 사용자 시간 (초) : 0.00 시스템 시간 (초) : 0.01 이 직업에 걸린 CPU의 비율 : 250 % 경과 된 (벽시계) 시간 (h : mm : ss 또는 m : ss) : 0 : 00.00 평균 공유 텍스트 크기 (kbyte) : 0 공유되지 않은 평균 데이터 크기 (kbyte) : 0 평균 스택 크기 (KB) : 0 평균 총 크기 (KB) : 0 최대 상주 세트 크기 (kbyte) : 0 평균 상주 세트 크기 (kbyte) : 0 주요 (I / O 필요) 페이지 결함 : 0 사소한 (프레임 회수) 페이지 오류 : 315 자발적 컨텍스트 전환 : 2 비자발적 컨텍스트 전환 : 0 스왑 : 0 파일 시스템 입력 : 0 파일 시스템 출력 : 0 전송 된 소켓 메시지 : 0 소켓 메시지 수신 : 0 전달 된 신호 : 0 페이지 크기 (바이트) : 4096 종료 상태 : 0
/bin/time -v
그것을 해결합니다.
time -l
MacOS에서 사용해보십시오 . 비슷한 출력을 제공합니다.
(이것은 이미 대답 한 오래된 질문입니다.
Yang의 대본에서 영감을 얻은 memusg 라는이 작은 도구를 생각해 냈습니다 . 많은 짧은 생활 과정을 처리하기 위해 샘플링 속도를 0.1로 높였습니다. 단일 프로세스를 모니터링하는 대신 프로세스 그룹의 rss 합계를 측정했습니다. (예, 함께 작동하는 많은 개별 프로그램을 작성합니다) 현재 Mac OS X 및 Linux에서 작동합니다. 사용법은 다음과 비슷해야합니다 time
.
memusg ls -alR /> / dev / null
그것은 순간의 피크 만 보여 주지만 다른 (거친) 통계를 기록하기위한 약간의 확장에 관심이 있습니다.
심각한 프로파일 링을 시작하기 전에 살펴보기위한 간단한 도구를 사용하는 것이 좋습니다.
ps -o rss=
rss가 내 BSD 매뉴얼 페이지에서 프로세스의 실제 메모리 (상주 세트) 크기 (1024 바이트 단위) 인 곳에서 표시된 값을 감시합니다 .
발 그린 드 원 라이너 :
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>
및 "찾기 최대 상주 세트 크기 ".
(Bash 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) time (1)은 이미 원하는 것을 수행합니다. 예를 들어 :
$ /usr/bin/time -f "%P %M" command
43% 821248
그러나 다른 프로파일 링 도구는 찾고자하는 것에 따라보다 정확한 결과를 제공 할 수 있습니다.
time
사용할 때 내장 된 명령 csh
입니다. 정확한 경로를 사용하면 외부 명령을 실행할 수 있습니다. 내가 아는 한 GNU 버전 만 format 옵션을 지원합니다.
/ 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
이 내장 함수 대신에 호출 된 바이너리를 호출하게하는 대신 사용할 수 있습니다. (예, command
위치 지정자가 아닌 command time
단지 다릅니다 time
.)
프로세스가 적어도 몇 초 동안 실행되면 다음 명령을 사용하여 주어진 명령 줄을 실행 한 다음 최고 RSS를 인쇄합니다 ( rss
관심있는 다른 속성으로 대체 ). 다소 가벼우 며 ps
우분투 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
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
Massif 사용 : http://valgrind.org/docs/manual/ms-manual.html
힙 트랙 은 GUI 및 텍스트 인터페이스가있는 KDE 도구입니다. 프로세스의 메모리 사용량을 이해하는 것이 valgrind보다 더 자세하고 화염 그래프를 제공하기 때문에 더 적합합니다. valgrind를 덜 검사하기 때문에 더 빠릅니다. 또한 최대 메모리 사용량을 제공합니다.
어쨌든 rss와 vss를 추적하는 것은 페이지를 공유 할 수 있기 때문에 오해의 소지가 있습니다 memusg
. 실제로해야 할 일은 Pss
in /proc/[pid]/smaps
또는 use 의 합계를 추적하는 것 pmap
입니다. 그놈 시스템 모니터 는 그렇게했지만 너무 비쌌습니다.
손으로 만든 bash 스크립트를 사용하여 바퀴를 다시 발명하십시오. 빠르고 깨끗합니다.
내 유스 케이스 : RAM이 적은 Linux 시스템을 모니터링하고 사용량이 많을 때 컨테이너 사용량을 스냅 샷으로 찍고 싶었습니다.
#!/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 % 미만
사용자 정의 명령 출력
'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