我的记忆发生了一些奇怪的事情。
我有 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
我以为 Zimbra 正在吃掉我所有的记忆,但奇怪的是,事实似乎并非如此:
# 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 借用未使用的内存进行磁盘缓存。这会让您看起来内存不足,但事实并非如此!一切安好!
要清除缓存,请以 root 身份使用此命令,然后观察结果的内存使用情况。
echo 3 > /proc/sys/vm/drop_caches