我在一个池中有两个服务器,分别安装了 Nginx、PHP5-FPM 和 Memcached。出于某种原因,池中的第一个服务器似乎莫名其妙地丢失了大约 2GB 的 RAM。我无法解释它去哪儿了。
重新启动后一切恢复正常,但几个小时后 RAM 会再次被使用。
起初我以为是 memcached 的问题,但最后我杀掉了所有可以杀掉的进程,但内存还是没有释放。甚至 init 1 也没有释放内存。
ipcs -m 为空,并且 slabtop 看起来与此服务器和池中使用很少内存的服务器非常相似。
df 显示 tmpfs 中大约有 360K
如果相关的话,这两台服务器几乎完全相同,因为它们都在不同的主机上相同的虚拟机管理程序 (VMWare ESXi 4.1) 上运行相同的操作系统,更新级别相同,但硬件相同。区别在于:-
- 第一个服务器有一个 NFS 挂载。我尝试卸载它并移除模块,但 RAM 使用率没有变化
- 第一台服务器监听 HTTP 和 HTTPS 站点,而第二台服务器仅监听 HTTP。
这是 free -m 的输出...
total used free shared buffers cached
Mem: 3953 3458 494 0 236 475
-/+ buffers/cache: 2746 1206
Swap: 1023 0 1023
这是 /proc/meminfo...
MemTotal: 4048392 kB
MemFree: 506576 kB
Buffers: 242252 kB
Cached: 486796 kB
SwapCached: 8 kB
Active: 375240 kB
Inactive: 369312 kB
Active(anon): 12320 kB
Inactive(anon): 3596 kB
Active(file): 362920 kB
Inactive(file): 365716 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1048572 kB
SwapFree: 1048544 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 15544 kB
Mapped: 3084 kB
Shmem: 412 kB
Slab: 94516 kB
SReclaimable: 75104 kB
SUnreclaim: 19412 kB
KernelStack: 632 kB
PageTables: 1012 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3072768 kB
Committed_AS: 20060 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 281340 kB
VmallocChunk: 34359454584 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 59392 kB
DirectMap2M: 4134912 kB
这是当时的进程列表……
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 24336 2160 ? Ss Jul22 0:09 /sbin/init
root 2 0.0 0.0 0 0 ? S Jul22 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jul22 0:38 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S Jul22 0:00 [kworker/u:0]
root 6 0.0 0.0 0 0 ? S Jul22 0:04 [migration/0]
root 7 0.0 0.0 0 0 ? S Jul22 0:32 [watchdog/0]
root 8 0.0 0.0 0 0 ? S Jul22 0:04 [migration/1]
root 10 0.0 0.0 0 0 ? S Jul22 0:22 [ksoftirqd/1]
root 11 0.0 0.0 0 0 ? S Jul22 0:15 [kworker/0:1]
root 12 0.0 0.0 0 0 ? S Jul22 0:31 [watchdog/1]
root 13 0.0 0.0 0 0 ? S Jul22 0:04 [migration/2]
root 15 0.0 0.0 0 0 ? S Jul22 0:04 [ksoftirqd/2]
root 16 0.0 0.0 0 0 ? S Jul22 0:14 [watchdog/2]
root 17 0.0 0.0 0 0 ? S Jul22 0:04 [migration/3]
root 19 0.0 0.0 0 0 ? S Jul22 0:04 [ksoftirqd/3]
root 20 0.0 0.0 0 0 ? S Jul22 0:11 [watchdog/3]
root 21 0.0 0.0 0 0 ? S< Jul22 0:00 [cpuset]
root 22 0.0 0.0 0 0 ? S< Jul22 0:00 [khelper]
root 23 0.0 0.0 0 0 ? S Jul22 0:00 [kdevtmpfs]
root 24 0.0 0.0 0 0 ? S< Jul22 0:00 [netns]
root 25 0.0 0.0 0 0 ? S Jul22 0:02 [sync_supers]
root 26 0.0 0.0 0 0 ? S Jul22 0:21 [kworker/u:1]
root 27 0.0 0.0 0 0 ? S Jul22 0:00 [bdi-default]
root 28 0.0 0.0 0 0 ? S< Jul22 0:00 [kintegrityd]
root 29 0.0 0.0 0 0 ? S< Jul22 0:00 [kblockd]
root 30 0.0 0.0 0 0 ? S< Jul22 0:00 [ata_sff]
root 31 0.0 0.0 0 0 ? S Jul22 0:00 [khubd]
root 32 0.0 0.0 0 0 ? S< Jul22 0:00 [md]
root 34 0.0 0.0 0 0 ? S Jul22 0:04 [khungtaskd]
root 35 0.0 0.0 0 0 ? S Jul22 0:15 [kswapd0]
root 36 0.0 0.0 0 0 ? SN Jul22 0:00 [ksmd]
root 37 0.0 0.0 0 0 ? SN Jul22 0:00 [khugepaged]
root 38 0.0 0.0 0 0 ? S Jul22 0:00 [fsnotify_mark]
root 39 0.0 0.0 0 0 ? S Jul22 0:00 [ecryptfs-kthrea]
root 40 0.0 0.0 0 0 ? S< Jul22 0:00 [crypto]
root 48 0.0 0.0 0 0 ? S< Jul22 0:00 [kthrotld]
root 50 0.0 0.0 0 0 ? S Jul22 2:59 [kworker/1:1]
root 51 0.0 0.0 0 0 ? S Jul22 0:00 [scsi_eh_0]
root 52 0.0 0.0 0 0 ? S Jul22 0:00 [scsi_eh_1]
root 57 0.0 0.0 0 0 ? S Jul22 0:09 [kworker/3:1]
root 74 0.0 0.0 0 0 ? S< Jul22 0:00 [devfreq_wq]
root 114 0.0 0.0 0 0 ? S Jul22 0:00 [kworker/3:2]
root 128 0.0 0.0 0 0 ? S Jul22 0:00 [kworker/1:2]
root 139 0.0 0.0 0 0 ? S Jul22 0:00 [kworker/0:2]
root 249 0.0 0.0 0 0 ? S< Jul22 0:00 [mpt_poll_0]
root 250 0.0 0.0 0 0 ? S< Jul22 0:00 [mpt/0]
root 259 0.0 0.0 0 0 ? S Jul22 0:00 [scsi_eh_2]
root 273 0.0 0.0 0 0 ? S Jul22 0:20 [jbd2/sda1-8]
root 274 0.0 0.0 0 0 ? S< Jul22 0:00 [ext4-dio-unwrit]
root 377 0.0 0.0 0 0 ? S Jul22 0:26 [jbd2/sdb1-8]
root 378 0.0 0.0 0 0 ? S< Jul22 0:00 [ext4-dio-unwrit]
root 421 0.0 0.0 17232 584 ? S Jul22 0:00 upstart-udev-bridge --daemon
root 438 0.0 0.0 21412 1176 ? Ss Jul22 0:00 /sbin/udevd --daemon
root 446 0.0 0.0 0 0 ? S< Jul22 0:00 [rpciod]
root 448 0.0 0.0 0 0 ? S< Jul22 0:00 [nfsiod]
root 612 0.0 0.0 21408 772 ? S Jul22 0:00 /sbin/udevd --daemon
root 613 0.0 0.0 21728 924 ? S Jul22 0:00 /sbin/udevd --daemon
root 700 0.0 0.0 0 0 ? S< Jul22 0:00 [kpsmoused]
root 849 0.0 0.0 15188 388 ? S Jul22 0:00 upstart-socket-bridge --daemon
root 887 0.0 0.0 0 0 ? S Jul22 0:00 [lockd]
root 919 0.0 0.0 14504 952 tty4 Ss+ Jul22 0:00 /sbin/getty -8 38400 tty4
root 922 0.0 0.0 14504 952 tty5 Ss+ Jul22 0:00 /sbin/getty -8 38400 tty5
root 924 0.0 0.0 14504 944 tty2 Ss+ Jul22 0:00 /sbin/getty -8 38400 tty2
root 925 0.0 0.0 14504 944 tty3 Ss+ Jul22 0:00 /sbin/getty -8 38400 tty3
root 930 0.0 0.0 14504 952 tty6 Ss+ Jul22 0:00 /sbin/getty -8 38400 tty6
root 940 0.0 0.0 0 0 ? S Jul22 0:07 [flush-8:0]
root 1562 0.0 0.0 58792 1740 tty1 Ss Jul22 0:00 /bin/login --
root 12969 0.0 0.0 0 0 ? S 07:18 0:02 [kworker/2:2]
root 30051 0.0 0.0 0 0 ? S 10:13 0:00 [flush-8:16]
root 30909 0.0 0.0 0 0 ? S 10:14 0:00 [kworker/2:1]
johncc 30921 0.2 0.2 26792 9360 tty1 S 10:17 0:00 -bash
root 31089 0.0 0.0 0 0 ? S 10:18 0:00 [kworker/0:0]
root 31099 0.0 0.0 42020 1808 tty1 S 10:19 0:00 sudo -i
root 31100 0.2 0.1 22596 5168 tty1 S 10:19 0:00 -bash
root 31187 0.0 0.0 0 0 ? S 10:19 0:00 [kworker/2:0]
root 31219 0.0 0.0 16880 1252 tty1 R+ 10:22 0:00 ps aux
root 31220 0.0 0.0 53924 536 tty1 R+ 10:22 0:00 curl -F sprunge=<- http://sprunge.us
有人能建议下一步该尝试什么,或者如何调试这个问题吗?我很茫然!
答案1
该机器是运行于ESXi虚拟机管理程序。那么记忆膨胀? 首先,我建议您检查此客户的 ESXi/vCenter 内存/气球统计信息。
可能会发生虚拟机管理程序要求客户机“充气”气球以分配一些额外内存的情况,例如为其他正在运行的客户机分配内存。但这需要加载一个气球驱动程序,该驱动程序可作为内核模块使用虚拟机管理程序。
最后,显而易见的问题可能是客户机是否已安装并正在运行 vmware tools,因为我在您提供的进程列表中看不到任何相关进程。通过更改,没有任何VMware 虚拟机在开始杀死它们之前要进行哪些处理?
答案2
watch 命令可能有用。尝试使用 watch -n 5 free 来监控内存使用情况,每五秒更新一次。
还
htop 是最好的解决方案。
sudo apt-get install htop
这样,您就会注意到哪些程序占用了最多的 RAM。并且如果您愿意,可以轻松终止一个程序。