IT story

실제 메모리 사용량별로 정렬 된 최상위 프로세스를 보는 방법은 무엇입니까?

hot-time 2020. 4. 19. 13:56
반응형

실제 메모리 사용량별로 정렬 된 최상위 프로세스를 보는 방법은 무엇입니까?


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

반응형