단일 프로세스의 총 메모리 사용량

단일 프로세스의 총 메모리 사용량

특정 프로세스의 전체 메모리 사용량을 얻고 싶습니다. 예를 들어, 총 메모리 양을 얻고 싶다고 가정해 보겠습니다.httpd. 따라서 tail 명령을 실행하면 다음과 같은 결과 tail -M가 나타납니다.

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                 
10036 mysql     20   0  417m  76m 3820 S  0.3 15.5   0:13.55 mysqld                                                                                  
10453 apache    20   0  229m  67m  42m S  0.0 13.7   0:10.81 httpd                                                                                   
10447 apache    20   0  230m  64m  38m S  0.0 13.0   0:11.54 httpd                                                                                   
10479 apache    20   0  226m  64m  42m S  0.0 13.0   0:09.75 httpd                                                                                   
10478 apache    20   0  230m  63m  38m S  0.0 12.9   0:11.02 httpd                                                                                   
10451 apache    20   0  230m  63m  37m S  0.0 12.8   0:10.37 httpd                                                                                   
 9599 apache    20   0  227m  61m  38m S  0.0 12.4   0:10.80 httpd                                                                                   
10454 apache    20   0  226m  60m  38m S  0.0 12.2   0:09.56 httpd                                                                                   
10476 apache    20   0  225m  58m  38m S  0.0 11.9   0:09.87 httpd                                                                                   
10332 apache    20   0  228m  50m  24m S  0.0 10.2   0:13.73 httpd                                                                                   
10445 apache    20   0  220m  42m  24m S  0.0  8.5   0:10.17 httpd                                                                                   
  637 root      10 -10 32816  25m 1712 S  0.0  5.2   0:00.01 iscsiuio                                                                                
  652 root      10 -10  5128 2972 1876 S  0.0  0.6   0:05.86 iscsid                                                                                  
 9592 root      20   0  207m 2872  900 S  0.0  0.6   0:00.39 httpd                                                                                   
10196 nobody    20   0  136m 2408  500 S  0.0  0.5   0:00.79 memcached              

이 경우 출력의 각 줄에 "VIRT", "RES", "SHR", "%CUP" 및 "%MEM"을 추가하고 싶습니다.

내가 할 수 있을까?

답변1

다음을 사용하여 이 작업을 수행해 보세요.:

top -b -n1 -c | 
    awk -vOFS=$'\t' '
        $2 == "apache"{
            virt+=$5; res+=$6; shr+=$7; cpu+=$9; mem+=$10; count++
        }
        END{
            print "virt", "res", "shr", "cpu", "mem"
            print virt, res, shr, cpu/count, mem/count
        }
    '

답변2

프로세스의 메모리 사용량은 잘 정의된 개념이 아닙니다. 공유 메모리 영역(공유 라이브러리, 실행 파일을 공유하는 여러 프로세스, 수정되지 않은 데이터를 공유하는 상위/하위 프로세스)이 있습니다. 지금 스레드를 사용하는 경우 정의에 따라 모든 스레드는 포함 프로세스의 리소스를 공유합니다.

답변3

top공유 메모리로 인해 메모리 값을 통계적으로 보고할 방법이 없습니다. 특히 동일한 프로세스의 여러 복사본이 있는 아파치와 같은 경우에는 더욱 그렇습니다. 라는 스크립트가 있습니다.ps_mem.py커널 보고서 > 2.6.23이 있는 한 공유 메모리를 고려하므로 메모리를 사용하는 것이 무엇인지 더 잘 알 수 있습니다.비례 슈트 치수"또는 프로세스당 PSS.

PID당 메모리 사용량에 대해 더 자세히 알고 싶다면 Private_*에서 값을 계산할 수도 있습니다 /proc/[0-9]*/smaps. 여기서 전용 메모리는 유일하게 의미 있는 값입니다.

관련 정보