东西吃我的服务器上的所有内存,但它不是fscaching

我有几次从我的监控系统接收到约98%的内存通知。 我跑了top ,只计算了60%左右的内存,如果我总结内存列。 几个小时后,内存使用恢复正常(〜70%)。 我怀疑fscaching,但free -m不能certificate这一点。

有任何想法吗? 服务器:x86-64,Ubuntu 12.04,8Gb RAM

# free -m

  total used free shared buffers cached Mem: 7958 7835 123 0 8 39 -/+ buffers/cache: 7787 171 Swap: 975 975 0 

#top

 top - 10:11:48 up 179 days, 14:25, 1 user, load average: 1.99, 1.81, 1.59 Tasks: 143 total, 1 running, 142 sleeping, 0 stopped, 0 zombie Cpu(s): 2.8%us, 0.6%sy, 0.0%ni, 82.8%id, 13.6%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 8149424k total, 8017556k used, 131868k free, 6708k buffers Swap: 999420k total, 999372k used, 48k free, 37952k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 30562 mysql 20 0 6033m 2.6g 3160 S 14 32.9 74:37.56 mysqld 10898 www-data 20 0 25.3g 2.0g 1560 S 16 25.6 19:44.10 java 9570 rabbitmq 20 0 2611m 166m 1540 S 6 2.1 628:08.96 beam.smp 13166 redis 20 0 94276 72m 584 S 0 0.9 23:24.47 redis-server 3798 root 20 0 348m 29m 988 S 0 0.4 167:36.37 cimprovagt 7614 root 20 0 51468 28m 1256 S 0 0.4 0:02.59 bash 3677 root 20 0 4706m 26m 0 S 0 0.3 110:47.59 java 3458 bind 20 0 668m 5328 1488 S 0 0.1 0:23.38 named 7595 root 20 0 85380 2956 880 S 0 0.0 0:00.25 sshd 2061 root 10 -10 4996 2948 2104 S 0 0.0 13:39.72 iscsid 632 syslog 20 0 244m 2404 360 S 0 0.0 7:12.39 rsyslogd 5855 newrelic 20 0 107m 1852 1248 S 0 0.0 128:23.28 nrsysmond 1 root 20 0 24340 1516 736 S 0 0.0 0:29.96 init 2741 root 20 0 17340 1308 944 R 0 0.0 0:00.04 top 4214 root 20 0 45336 1264 1020 S 0 0.0 6:12.72 cdm 4235 root 20 0 12428 1108 908 S 0 0.0 10:55.38 processes 4178 root 20 0 19124 1064 856 S 0 0.0 7:20.07 controller 5853 ntp 20 0 37772 1036 872 S 0 0.0 7:40.35 ntpd 4179 root 20 0 86044 1024 848 S 0 0.0 9:55.54 spooler 4008 root 20 0 4090m 980 756 S 0 0.0 0:08.70 console-kit-dae 3790 root 20 0 422m 952 668 S 0 0.0 89:21.80 cimprovagt 3629 root 20 0 50032 868 752 S 0 0.0 1:17.44 sshd 4075 root 20 0 182m 844 408 S 0 0.0 0:02.90 polkitd 27661 root 20 0 101m 776 772 S 0 0.0 0:00.02 mysql 18465 root 20 0 101m 732 732 S 0 0.0 0:00.04 mysql 3436 root 20 0 19112 716 636 S 0 0.0 0:11.25 cron 3783 root 20 0 1009m 716 432 S 0 0.0 0:04.83 cimserver 26239 root 20 0 22092 700 696 S 0 0.0 0:00.03 bash 4181 root 20 0 13196 696 596 S 0 0.0 4:18.57 hdb 3406 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty 3410 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty 3428 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty 3429 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty 3432 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty 3972 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty 18452 root 20 0 22076 620 620 S 0 0.0 0:00.00 bash 361 root 20 0 22104 568 568 S 0 0.0 0:00.04 udevd 3441 root 20 0 15980 560 464 S 0 0.0 26:28.16 irqbalance 654 messageb 20 0 23948 516 324 S 0 0.0 0:01.98 dbus-daemon 676 root 20 0 21188 504 504 S 0 0.0 0:00.00 bluetoothd 3665 root 20 0 4400 492 488 S 0 0.0 0:00.00 sh 5546 rabbitmq 20 0 7672 488 308 S 0 0.0 1:04.49 epmd 26238 root 20 0 26092 476 476 S 0 0.0 0:00.24 screen 2060 root 20 0 4504 440 400 S 0 0.0 3:18.60 iscsid 

缓冲区 FScaching。

缓冲区与特定的块设备相关联,并覆盖文件系统元数据的caching以及跟踪正在运行的页面。 caching只包含停放的文件数据。 也就是说,缓冲区记住目录中的内容,文件权限是什么,以及跟踪特定块设备正在写入或读取什么内存。 caching只包含文件本身的内容。

https://stackoverflow.com/a/12547130/636573

Top也显示了您给我们的快照中IOWAIT的13%。 对我来说,这看起来像一个OLTP数据库没有得到足够的磁盘IOPS它所需要的。 升级您的存储子系统。

好的,首先回去确定你的最高输出是按内存使用( RES ident大小)sorting的,如果不是这样,用这个输出更新你的问题。 那么你实际上可以看到什么东西咀嚼你的RAM。

其次,忘记%MEM列。 那个特别的蛋糕是谎言(由于四舍五入)。
把注意力集中在程序的RES ident大小上(如果你关心的是交换到VIRT大小),总结那些列,这些数字将和你在freetop输出中看到的一致。


从查看最高的输出结果来看,你有一个巨大的(2.6G)MySQL进程和一个巨大的(2.0G)Java进程 – 我怀疑这两个人是你的共同阴谋者咀嚼所有的RAM(不pipe那个特定的Java进程是什么要求MySQL做的是产生巨大的结果集或中间数据)。
Java进程也有一个25G的虚拟大小(!!) – 很明显,它在内部泄漏内存,垃圾收集器没有释放(或者可能是处理一个巨大的结果集,效率低下)。

我敢打赌,你的系统可能会在“正常的日子”里使用4-5G的RAM,当这两个进程结合在一起的时候,他们会嚼碎剩余的(然后是一些),然后在坏的地方结束。
找出他们正在做什么,修复它,你的问题就会消失。