실제 메모리 사용량별로 정렬 된 최상위 프로세스를 보는 방법은 무엇입니까?
12G 메모리를 가진 서버가 있습니다. 상단 조각은 다음과 같습니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12979 frank 20 0 206m 21m 12m S 11 0.2 26667:24 krfb
13 root 15 -5 0 0 0 S 1 0.0 36:25.04 ksoftirqd/3
59 root 15 -5 0 0 0 S 0 0.0 4:53.00 ata/2
2155 root 20 0 662m 37m 8364 S 0 0.3 338:10.25 Xorg
4560 frank 20 0 8672 1300 852 R 0 0.0 0:00.03 top
12981 frank 20 0 987m 27m 15m S 0 0.2 45:10.82 amarok
24908 frank 20 0 16648 708 548 S 0 0.0 2:08.84 wrapper
1 root 20 0 8072 608 572 S 0 0.0 0:47.36 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
다음을 free -m
보여줍니다.
total used free shared buffers cached
Mem: 12038 11676 362 0 599 9745
-/+ buffers/cache: 1331 10706
Swap: 2204 257 1946
올바르게 이해하면 시스템에 362MB의 사용 가능한 메모리 만 있습니다. 내 질문은 : 어떤 프로세스가 대부분의 메모리를 소비하고 있는지 어떻게 알 수 있습니까?
배경 정보와 마찬가지로 시스템이 실행 중 64bit OpenSuse 12
입니다.
먼저, "사용되지 않은 메모리는 메모리를 낭비합니다"라는이 만트라를 잠시 반복하십시오. 리눅스 커널은 주위에 계속 큰 그 외모보다 중요한 푸시 데이터 무엇인가 때까지, 파일 메타 데이터 및 요청 된 파일의 양. 당신이 실행할 수있는 이유입니다 :
find /home -type f -name '*.mp3'
find /home -type f -name '*.aac'
두 번째 find
인스턴스가 우스운 속도로 실행되도록합니다.
리눅스는 너무 많은 노력없이 메모리 사용량의 급증을 처리하기 위해 약간의 메모리를 '무료'로 남겨둔다.
둘째, 모든 기억을 먹는 과정을 찾고 싶습니다. 에서 top
사용 M
명령은 메모리 사용을 기준으로 정렬합니다. VIRT
프로세스가 사용하는 메모리의 양이 아니라 할당 된 가상 메모리의 양을 알려주 는 열 을 무시하십시오 . RES
얼마나 많은 메모리가 상주 하거나 현재 램에 있는지보고합니다 (요청에도 불구하고 디스크로 스왑되거나 실제로는 할당되지 않음).
그러나 거의 모든 프로세스에 대해 메모리를 한 번만 RES
계산 /lib/libc.so.6
하므로 프로세스가 사용하는 메모리 양을 정확하게 측정하는 것은 아닙니다. 이 SHR
열은 다른 프로세스와 공유 되는 메모리 양을보고 하지만 다른 프로세스가 실제로 공유하고 있다는 보장은 없습니다. 공유 가능할 수 있으며 다른 누구도 공유하고 싶지 않습니다.
이 smem
도구는 각 개별 프로세스에서 실제로 얼마나 많은 메모리를 비난 해야 하는지를 사용자가 더 잘 파악할 수 있도록 설계되었습니다 . 실제로 독특하고 공유되는 것을 파악하고 공유 메모리를 공유하는 프로세스에 비례하여 키를 계산하는 영리한 작업을 수행합니다. smem
기억력이 더 나은 곳을 이해하는 데 도움이 될 수 top
있지만 top
훌륭한 첫 번째 도구입니다.
리눅스 / 유닉스에서 최고 명령을 사용하여 빠른 팁을 사용하십시오
$ top
그리고 Shift+ 를 누르십시오 m(즉, 대문자를 쓰십시오 M
).
에서 man top
SORTING of task window
For compatibility, this top supports most of the former top sort keys.
Since this is primarily a service to former top users, these commands do
not appear on any help screen.
command sorted-field supported
A start time (non-display) No
M %MEM Yes
N PID Yes
P %CPU Yes
T TIME+ Yes
또는 Shift+ f를 누른 다음 키 n를 눌러 메모리 사용량별로 정렬 할 디스플레이를 선택한 다음을 누르십시오 Enter. 메모리 사용량에 따라 주문 된 활성 프로세스가 표시됩니다
ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 10
(-n 숫자 플래그를 추가하여 정렬 명령.)
먼저 의 출력에 대한 설명을free
읽어야 합니다 . 결론 : 프로세스에서 즉시 사용할 수있는 최소 10.7GB 의 메모리가 있습니다.
그런 다음 프로세스에 "메모리 사용"이 무엇인지 정의해야합니다 (쉽거나 모호하지는 않습니다).
그렇다면 우리는 더 많은 것을 도울 수 있습니다 :-)
메모리 사용량 별 프로세스 나열 및 정렬 :
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
ps aux --sort '%mem'
에서 procps의 'PS (우분투 12.04에 기본값) 출력을 같이 생성합니다 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
tomcat7 3658 0.1 3.3 1782792 124692 ? Sl 10:12 0:25 /usr/lib/jvm/java-7-oracle/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -D
root 1284 1.5 3.7 452692 142796 tty7 Ssl+ 10:11 3:19 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
ciro 2286 0.3 3.8 1316000 143312 ? Sl 10:11 0:49 compiz
ciro 5150 0.0 4.4 660620 168488 pts/0 Sl+ 11:01 0:08 unicorn_rails worker[1] -p 3000 -E development -c config/unicorn.rb
ciro 5147 0.0 4.5 660556 170920 pts/0 Sl+ 11:01 0:08 unicorn_rails worker[0] -p 3000 -E development -c config/unicorn.rb
ciro 5142 0.1 6.3 2581944 239408 pts/0 Sl+ 11:01 0:17 sidekiq 2.17.8 gitlab [0 of 25 busy]
ciro 2386 3.6 16.0 1752740 605372 ? Sl 10:11 7:38 /usr/lib/firefox/firefox
따라서 Firefox는 내 메모리의 16 %를 차지하는 최고의 소비자입니다.
당신은 또한 관심이있을 수 있습니다 :
ps aux --sort '%cpu'
다음 단계에 따라 정렬 할 열을 지정할 수 있습니다.
단계 : * 상단 * 시프트 + F * 목록에서 열을 선택하십시오 예를 들어 n은 메모리를 기준으로 정렬을 의미하고 * 엔터 키를 치시오 * 확인
터미널에서이 코드를 실행하면 메모리 사용량을 확인할 수 있습니다.
$ watch -n2 free -m
$ htop
프로세스 이름별로 사용한 메모리를 합계하는 방법 :
때로는 가장 큰 단일 프로세스를 살펴 보더라도 아직 사용되지 않은 메모리가 많이 있습니다. 메모리를 사용하여 동일한 작은 프로세스가 많이 있는지 확인하려면 다음과 같은 명령을 사용하여 awk를 사용하여 동일한 이름의 프로세스가 사용하는 총 메모리를 요약 할 수 있습니다.
ps -e -orss=,args= |awk '{print $1 " " $2 }'| awk '{tot[$2]+=$1;count[$2]++} END {for (i in tot) {print tot[i],i,count[i]}}' | sort -n
예 : 출력
9344 docker 1
9948 nginx: 4
22500 /usr/sbin/NetworkManager 1
24704 sleep 69
26436 /usr/sbin/sshd 15
34828 -bash 19
39268 sshd: 10
58384 /bin/su 28
59876 /bin/ksh 29
73408 /usr/bin/python 2
78176 /usr/bin/dockerd 1
134396 /bin/sh 84
5407132 bin/naughty_small_proc 1432
28061916 /usr/local/jdk/bin/java 7
이 간단한 명령이 있습니다.
$ free -h
참고 URL : https://stackoverflow.com/questions/4802481/how-to-see-top-processes-sorted-by-actual-memory-usage
'IT story' 카테고리의 다른 글
스위프트에서 지연을 만드는 방법? (0) | 2020.04.19 |
---|---|
프래그먼트를 제거하는 방법, 즉 finish ()와 동등합니까? (0) | 2020.04.19 |
Eclipse가 시작시 중단되는 것을 어떻게 방지합니까? (0) | 2020.04.19 |
호스트에서 Vagrant guest로 단일 파일을 복사하는 가장 쉬운 방법은 무엇입니까? (0) | 2020.04.19 |
Numpy 배열을 이미지로 저장 (0) | 2020.04.19 |