Linux : 모든 RAM을 사용하는 프로세스를 찾으십니까?

실제로 묻기 전에 명확하게 말하면 : 예, 디스크 캐시에 대해 알고 있습니다. 아니요, 그것은 내 경우가 아닙니다 🙂 죄송합니다,이 프리앰블 🙂

CentOS 5를 사용하고 있습니다. 시스템의 모든 응용 프로그램이 많이 바뀌고 있으며 시스템이 매우 느립니다. 내가 할 때 free -m, 여기 내가 가진 것이 있습니다 :

             total       used       free     shared    buffers     cached
Mem:          3952       3929         22          0          1         18
-/+ buffers/cache:       3909         42
Swap:        16383         46      16337

따라서 실제로 42Mb 만 사용할 수 있습니다! 내가 이해하는 한 -/+ buffers/cache실제로 디스크 캐시를 계산하지 않으므로 실제로 42MB 만 있습니다. 나는 틀렸다고 생각했기 때문에 디스크 캐싱을 끄려고 시도했지만 아무런 효과가 없었습니다. 사진은 동일하게 유지되었습니다.

그래서, 누가 내 RAM을 모두 사용하고 있는지 알아보기로 결정했습니다 top. 그러나 분명히 내 RAM을 사용하는 프로세스가 없다고보고합니다. 내 유일한 프로세스는 MySQL이지만 0.1 %의 RAM과 400Mb의 스왑을 사용하고 있습니다. 다른 서비스 또는 응용 프로그램을 실행하려고 할 때의 동일한 그림-모두 스왑으로 이동하여 topMEM이 사용되지 않음을 나타냅니다 (모든 프로세스에서 최대 0.1 %).

top - 15:09:00 up  2:09,  2 users,  load average: 0.02, 0.16, 0.11
Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4046868k total,  4001368k used,    45500k free,      748k buffers
Swap: 16777208k total,    68840k used, 16708368k free,    16632k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
 3214 ntp       15   0 23412 5044 3916 S  0.0  0.1   0:00.00  17m ntpd
 2319 root       5 -10 12648 4460 3184 S  0.0  0.1   0:00.00 8188 iscsid
 2168 root      RT   0 22120 3692 2848 S  0.0  0.1   0:00.00  17m multipathd
 5113 mysql     18   0  474m 2356  856 S  0.0  0.1   0:00.11 472m mysqld
 4106 root      34  19  251m 1944 1360 S  0.0  0.0   0:00.11 249m yum-updatesd
 4109 root      15   0 90152 1904 1772 S  0.0  0.0   0:00.18  86m sshd
 5175 root      15   0 90156 1896 1772 S  0.0  0.0   0:00.02  86m sshd

다시 시작해도 도움이되지 않으며 매우 느리 므로이 기계 (4 코어, 4Gb RAM, RAID1)에서는 일반적으로 기대하지 않습니다.

그래서, 나는 이것이 RAM을 사용하는 디스크 캐시가 아니라고 확신합니다. 왜냐하면 일반적으로 RAM을 줄이고 다른 프로세스가 RAM을 사용하도록하고 대신 스왑으로 이동해야하기 때문입니다.

마지막으로, 누군가가 실제로 어떤 프로세스가 메모리를 그렇게 많이 사용하는지 알아내는 방법에 대한 아이디어가 있다면?



답변

Linux에서는 top프로세스 에서 <키를 눌러 출력 표시 정렬을 왼쪽으로 이동할 수 있습니다 . 기본적으로 정렬되어 %CPU있으므로 키를 4 번 누르면 VIRT가상 메모리 크기 에 따라 정렬됩니다 .

이를 수행하는 다른 방법은 다음과 같습니다.

ps -e -o pid,vsz,comm= | sort -n -k 2

프로세스 가상 크기별로 정렬하여 출력해야합니다.

긴 버전은 다음과 같습니다.

ps --everyone --format=pid,vsz,comm= | sort --numeric-sort --key=2

답변

프로세스 메모리를 MB 단위로 표시하고 프로세스 경로를 표시하십시오.

ps aux  | awk '{print $6/1024 " MB\t\t" $11}'  | sort -n

답변

서버에서 동일한 증상을 나타내지 만 여전히 메모리 고갈을 나타내는 참고 사항입니다. 결국 32GB의 RAM이있는 상자의 sysctl.conf와 12000으로 구성된 거대한 페이지가있는 DB에 대한 설정이 발견되었습니다.이 상자에는 2GB의 RAM 만 있으므로 모든 사용 가능한 RAM을 큰 페이지에 할당했습니다 960 명). 아무 것도 사용되지 않았기 때문에 큰 페이지를 10으로 설정하면 모든 메모리가 해제됩니다.

HugePages_ 설정을 찾기 위해 / proc / meminfo를 빠르게 확인하면 하나 이상의 예기치 않은 메모리 호그 문제를 해결할 수 있습니다.


답변

필자의 경우 문제는 서버가 vmw_balloon모듈이 활성화 된 VMware 가상 서버라는 것입니다 .

$ lsmod | grep vmw_balloon
vmw_balloon            20480  0
vmw_vmci               65536  2 vmw_vsock_vmci_transport,vmw_balloon

달리는:

$ vmware-toolbox-cmd stat balloon
5189 MB

실제로 호스트는 약 5GB의 메모리를 회수했습니다. 따라서 내 VM에 8GB가 “공식적으로”있음에도 불구하고 실제로는 훨씬 적습니다.

$ free
              total        used        free      shared  buff/cache   available
Mem:        8174716     5609592       53200       27480     2511924     2458432
Swap:       8386556        6740     8379816

답변

ps 명령을 사용하여 프로세스에 대한 자세한 정보를 얻을 수도 있습니다.

ps aux | less

답변

파이썬 프로세스에서 사용하는 메모리총 메모리를 참조 합니까? -스택 오버플로 , 이것이 나의 대답입니다. 이제 특정 프로세스 (파이썬) 수 도구를 얻습니다.

# Megabyte.
$ ps aux | grep python | awk '{sum=sum+$6}; END {print sum/1024 " MB"}'
87.9492 MB

# Byte.
$ ps aux | grep python | awk '{sum=sum+$6}; END {print sum " KB"}'
90064 KB

내 프로세스 목록을 첨부하십시오.

$ ps aux  | grep python
root       943  0.0  0.1  53252  9524 ?        Ss   Aug19  52:01 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid
root       950  0.6  0.4 299680 34220 ?        Sl   Aug19 568:52 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid
root      3803  0.2  0.4 315692 36576 ?        S    12:43   0:54 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid
jonny    23325  0.0  0.1  47460  9076 pts/0    S+   17:40   0:00 python
jonny    24651  0.0  0.0  13076   924 pts/4    S+   18:06   0:00 grep python

참고


답변

show-memory-usage.sh컨텐츠로 호출되는 스크립트를 작성하십시오 .

#!/bin/sh
ps -eo rss,pid,user,command | sort -rn | head -10 | awk '{ hr[1024**2]="GB"; hr[1024]="MB";
 for (x=1024**3; x>=1024; x/=1024) {
 if ($1>=x) { printf ("%-6.2f %s ", $1/x, hr[x]); break }
 } } { printf ("%-6s %-10s ", $2, $3) }
 { for ( x=4 ; x<=NF ; x++ ) { printf ("%s ",$x) } print ("\n") }
 '