메모리는 더 이상 사용되지 않지만 여전히 할당되어 있습니다.

메모리는 더 이상 사용되지 않지만 여전히 할당되어 있습니다.

내 기억에 이상한 일이 일어났습니다.

나는 Ubuntu 14.04 서버와 Zimbra 8.6을 가지고 있으며 커널(이 서버의 경우)은 3.13.0-37-generic입니다. 하지만 다른 커널에서 문제를 본 적이 있습니다.

메모리 및 스왑 공간이 가득 찼습니다.

$ free
             total       used       free     shared    buffers     cached
Mem:       6112624    5991208     121416         88       4752      79224
-/+ buffers/cache:    5907232     205392
Swap:      3905532    3624768     280764

짐브라가 내 기억을 다 먹어치우는 줄 알았는데 이상하게도 그렇지 않은 것 같다.

# ps -A --sort -rss -o comm,pmem | head -n 11
COMMAND         %MEM
java            10.6
clamd            4.7
mysqld           3.0
java             2.0
slapd            1.2
/opt/zimbra/ama  1.1
/opt/zimbra/ama  1.0
/opt/zimbra/ama  1.0
/opt/zimbra/ama  1.0
/opt/zimbra/ama  0.9

내 모든 프로세스는 메모리의 절반을 차지합니다. 내 버퍼와 캐시는 거의 아무것도 차지하지 않습니다.

Zimbra를 중지해도 여전히 3.5GB가 사용됩니다.

# ps -A --sort -rss -o comm,pmem | head -n 12
COMMAND         %MEM
bash             0.0
bash             0.0
bash             0.0
sudo             0.0
rsyslogd         0.0
http             0.0
http             0.0
htop             0.0
init             0.0
ps               0.0

다시 시작한 후에는 200Mb 미만의 메모리가 사용됩니다.

서버는 139일 동안 실행되었고, 메모리 사용량은 매일 조금씩 증가했습니다.

그래서 내 질문은: 무엇이 모든 메모리를 차지합니까?

1을 편집하고 몇 가지 정보를 추가합니다.

$ ls -l /dev/shm
lrwxrwxrwx 1 root root 8 mai    2 12:46 /dev/shm -> /run/shm

$ ipcs 
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    


$ df 
Filesystem                  1K-blocks     Used Available Use% Mounted on
udev                 3051744         4    3051740   1% /dev
tmpfs                 611260       496     610764   1% /run
/dev/sda2           14287344   2765996   10772548  21% /
none                       4         0          4   0% /sys/fs/cgroup
none                    5120         0       5120   0% /run/lock
none                 3056288         0    3056288   0% /run/shm
none                  102400         0     102400   0% /run/user

재부팅 후 (Zimbra 시작):

$ free
             total       used       free     shared    buffers     cached
Mem:       6112576    5712908     399668        832     237892    1829424
-/+ buffers/cache:    3645592    2466984
Swap:      3905532          0    3905532

RAM의 일부 그래프(12시 30분경에 서버를 다시 시작했습니다):

메모리 사용량

두 번째 그래프는 다음 결과를 보여줍니다.

ps aux |awk '{s+=$4} END {print s}'

셋째, 결과:

smem -tw |grep -v Area | sed 's/ //;s/ //'

답변1

은닉처.

좋은 요약이 있습니다http://www.linuxatemyram.com/.

Linux는 디스크 캐싱을 위해 사용되지 않은 메모리를 빌려옵니다. 이렇게 하면 메모리가 부족한 것처럼 보이지만 그렇지 않습니다! 다 괜찮아요!

캐시를 지우려면 루트로 이 명령을 사용하고 결과적인 메모리 사용량을 관찰하십시오.

echo 3 > /proc/sys/vm/drop_caches

관련 정보