리눅스 / 유닉스 프로세스의 최대 메모리 사용량
명령 행을 실행하고 최대 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 / 시간 -v ls / .... 시간이 초과되는 명령 : "ls /" 사용자 시간 (초) : 0.00 시스템 시간 (초) : 0.01 이 직업에 걸린 CPU의 비율 : 250 % 경과 된 (벽시계) 시간 (h : mm : ss 또는 m : ss) : 0 : 00.00 평균 공유 텍스트 크기 (KB) : 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
(이것은 이미 대답 한 오래된 질문입니다.
Yang의 대본에서 영감을 얻은 memusg 라는이 작은 도구를 생각해 냈습니다 . 짧은 생활 과정을 처리하기 위해 샘플링 속도를 0.1로 높였습니다. 단일 프로세스를 모니터링하는 대신 프로세스 그룹의 rss 합계를 측정했습니다. (예, 함께 작동하는 많은 개별 프로그램을 작성합니다) 현재 Mac OS X 및 Linux에서 작동합니다. 사용법은 다음과 비슷해야합니다 time
.
memusg ls -alR /> / dev / null
그것은 순간의 최고점 만 보여 주지만 다른 (거친) 통계를 기록하기위한 약간의 확장에 관심이 있습니다.
심각한 프로파일 링을 시작하기 전에 살펴보기위한 간단한 도구를 사용하는 것이 좋습니다.
발 그린 드 원 라이너 :
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
아마도 (gnu) time (1)은 이미 원하는 것을 수행합니다. 예를 들어 :
$ /usr/bin/time -f "%P %M" command
43% 821248
그러나 다른 프로파일 링 도구는 찾고자하는 것에 따라보다 정확한 결과를 제공 할 수 있습니다.
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
. . .
/ usr / bin / time은 실제로 원하는 것을 할 수 있습니다. 같은 것.
/ usr / bin / time --format = '(% Xtext + % Ddata % Mmax)'
자세한 내용은 시간 (1)을 참조하십시오 ...
프로세스가 적어도 몇 초 동안 실행되면 다음 명령을 사용하여 주어진 명령 줄을 실행 한 다음 피크 RSS를 stderr 인쇄합니다 ( 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
MacOS Sierra에서는 다음을 사용하십시오.
/usr/bin/time -l commandToMeasure
grep
원하는 것을 가지고 갈 수 있습니다 .
글쎄, 실제로 메모리 피크와 좀 더 깊이있는 통계를 보여주고 싶다면 valgrind 와 같은 프로파일 러를 사용하는 것이 좋습니다 . 좋은 valgrind 프런트 엔드는 alleyoop 입니다.
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
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 % 미만
사용자 정의 명령 출력
macOS에서는 대신 DTrace를 사용할 수 있습니다. "Instruments"앱은이를위한 훌륭한 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 /'| 정렬 -g | 꼬리 -n 1
grep mem_heap_B massif.out ... mem_heap_B = 1150976 mem_heap_B = 1150976 ...
이것은 "top"명령이 비슷한 순간에 보여주는 것과는 매우 다릅니다.
14673 gu27mox 20 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
참고 URL : https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process
'development' 카테고리의 다른 글
Windows 8 런타임 (WinRT / Windows Store 앱 / Windows 10 Universal App)은 Silverlight 및 WPF와 어떻게 다릅니 까? (0) | 2020.02.29 |
---|---|
gdb에서 긴 문자열의 전체 값을 어떻게 인쇄합니까? (0) | 2020.02.29 |
WPF에도 MessageBox가 있습니까? (0) | 2020.02.29 |
팬더 데이터 프레임의 인덱스를 열로 변환하는 방법은 무엇입니까? (0) | 2020.02.29 |
텍스트 입력 필드를위한 CSS 선택기? (0) | 2020.02.29 |