이 응용 프로그램은 얼마나 많은 RAM을 사용합니까?


10

실행 top -c하거나 htop메모리 소비가있는 프로세스를 얻었지만보고 싶지는 않습니다.

주어진 응용 프로그램의 RAM 소비를 볼 수있는 명령 줄이 있습니까?

예를 들어 Apache 웹 서버의 RAM 소비량을보고 싶습니다 (대신 실행하는 모든 프로세스를 확인하는 것이 아니라)

ram 


감사. 내가 그것을 찾을 수있는 가장 상위 -c 이미 나에게주는 것은 프로세스에 의해 메모리 소비입니다

답변:


4

여기에 아주 좋은 자세한 설명이 있습니다 : https://blogs.kde.org/2005/09/15/measuring-memory-usage

그러나 본질적으로 : 응용 프로그램이 어떻게 설정되어 있는지를 깊이 파고 이해해야합니다.

예를 들어, mysql을 보면 :

  PID  PPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                    
 6004 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:40.33 mysqld                                                                                                                                            
16115 16085 composit  20   0 37900  27m 2908 S    0  0.2   0:00.37 mysqld                                                                                                                                            
16116 16115 composit  20   0 37900  27m 2908 S    0  0.2   2:07.34 mysqld                                                                                                                                            
16117 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld                                                                                                                                            
16118 16116 composit  20   0 37900  27m 2908 S    0  0.2   3:19.79 mysqld                                                                                                                                            
16119 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.01 mysqld                                                                                                                                            
16120 16116 composit  20   0 37900  27m 2908 S    0  0.2   5:31.09 mysqld                                                                                                                                            
16121 16116 composit  20   0 37900  27m 2908 S    0  0.2  14:19.53 mysqld                                                                                                                                            
16122 16116 composit  20   0 37900  27m 2908 S    0  0.2  36:13.67 mysqld                                                                                                                                            
16123 16116 composit  20   0 37900  27m 2908 S    0  0.2  30:30.64 mysqld                                                                                                                                            
16124 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.15 mysqld                                                                                                                                            
16493 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld    

사용 된 총 메모리는 약 25MB입니다 (27MB RES를 가져 와서 공유 (SHR) 빼기)

"killall mysqld"를 실행하기 전후에 총 메모리 사용량 (free -m, + / buffers / cache)을 확인하여이를 확인했습니다. 모든 mysqld 프로세스를 종료 한 후 "free -m"에 따라 메모리 사용량이 25MB 감소했습니다.

각 프로세스에 동일한 VIRT, RES 및 SHR 열이있는 경우 동일한 프로세스의 스레드 일 수 있습니다. (오래된 Linux 라이브러리는 본질적으로 동일한 메모리를 차지하는 여러 실제 프로세스를 생성하여 스레딩을 처리했습니다)

서로 다른 경우 (RES-SHR)의 합을 수행하여 추정 할 수 있습니다. 그러나 프로세스가 실제로 동일한 프로세스의 스레드가 아닌 별도의 프로세스 인 경우에만 작동합니다. PPID (부모 프로세스 ID)를 보면 도움이됩니다. 부모가 모두 같은 부모라면 아마도 스레드 일뿐입니다 (반드시 그런 것은 아닙니다).

불행히도 리눅스에서는이 방법에 대한 쉬운 방법이 없습니다. 가장 쉬운 방법은 프로세스를 종료하기 직전에 "자유"를 확인한 후 즉시 다시 확인하는 것입니다. "-/ + buffers / cache :"줄을보고 얼마나 많은 메모리 사용량이 줄 었는지, 얼마나 많은 메모리 사용량을 사용했는지 알 수 있습니다.


2

도움의 비트 man ps이 위대한 대답 ...

ps -up $(pidof PROCESS_NAME)

예를 들면 다음과 같습니다.

[wilf@comp ~]$ ps -up $(pidof firefox)
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
wilf      1619  8.9  5.6 1464216 342396 ?      Sl   17:56   1:36 /usr/lib64/firefox/firefox
[wilf@comp ~]$ 

다른 방법들:

cat /proc/$(pidof firefox)/status | grep VmSize

이것은없이 실행할 수 있습니다 -xtail -1:

pmap -x $(pidof firefox) | tail -1

백분율 만 표시합니다.

top -p $(pidof firefox)

또한, 사용하는 동안 top당신이 눌러 i유휴 / 좀비 프로세스를 무시하고 쉽게 읽을 수 있도록합니다 : 훨씬 더 작은 상단 출력


그러나 응용 프로그램은 여러 프로세스를 시작합니다. 어떤 프로세스가 주요 프로세스인지 어떻게 알 수 있습니까?

추측? 내가 생각 pmap는 PID가 사용하는 자원에 대한 물건의 쇼를 많이합니다. 정보는 프로세스 이름과를 사용하여 찾은 PID를 기반으로 제공 pidof되므로 기본 프로세스는 사용자가 제공 한 이름에 관계없이 표시됩니다 (부모 프로세스를 다시 참조하는지 여부를 모릅니다)
Wilf

2
이것은 프로세스별로 출력을 분리합니다. 이 방법으로 모든 Apache 프로세스에서 사용하는 총 메모리 양을 얻을 수는 없습니다. 요약 하면 공유 영역을 한 번만 계산 해야합니다 (어려움).
Gilles 'SO- 악마 그만해
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.