我在一台装有两个 JBoss 实例和一个 Tomcat 实例的 Linux 机器上遇到了奇怪的内存问题。直到 7 月 20 日之前,一切都运行良好。此后,可用内存(总使用量 - 缓冲区 - 缓存)已从 3-4GB 降至 500MB 以下。我为这台服务器添加了 6 GB RAM,但结果还是一样。
这是每个实例的实际内存配置,具有 16 GB RAM 服务器:
Tomcat(7.0.22):堆 - 4G,MaxPermSize - 1G,Jboss inst1(5.1.0.GA):堆 - 1 GB,MaxPermSize = 512 Mb Jboss inst2(6.0.0):堆 - 3 GB,MaxPermSize = 512 Mb
服务器上未部署任何应用程序的新版本。
发行版:Debian 5.0.9 内核:2.6.26-2-amd64
如果我终止这些进程,SO 只会释放大约 6 GB 的 RAM,正如我们所见:
apora:~# free -m; kill -9 17431; sleep 10; free -m
total used free shared buffers cached
Mem: 16090 16004 86 0 0 13
-/+ buffers/cache: 15989 100
Swap: 4580 2301 2279
total used free shared buffers cached
Mem: 16090 12597 3492 0 0 13
-/+ buffers/cache: 12583 3506
Swap: 4580 1439 3141
apora:~#
终止 Jboss Inst02:
apora:~# kill -9 20385
apora:~# free -m
total used free shared buffers cached
Mem: 16090 10908 5182 0 1 21
-/+ buffers/cache: 10885 5204
Swap: 4580 723 3857
apora:~#
终止 Jboss Inst01:
apora:~# free -m
total used free shared buffers cached
Mem: 16090 10207 5883 0 1 21
-/+ buffers/cache: 10183 5906
Swap: 4580 33 4547
apora:~#
我终止了其他进程,如 nscd、dsmc(tivoli TSM 代理)以及其他根据 top 消耗内存的进程,但我的系统仍然消耗大约 10 GB 的 RAM。
cat /proc/meminfo 的结果显示有少量的 Slab 被使用并且可回收:
apora:~# cat /proc/meminfo
MemTotal: 16476656 kB
MemFree: 87588 kB
Buffers: 233468 kB
Cached: 265064 kB
SwapCached: 0 kB
Active: 5876332 kB
Inactive: 304664 kB
SwapTotal: 4690928 kB
SwapFree: 4690304 kB
Dirty: 516 kB
Writeback: 0 kB
AnonPages: 5682444 kB
Mapped: 50244 kB
Slab: 152660 kB
SReclaimable: 118892 kB
SUnreclaim: 33768 kB
PageTables: 26768 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 12929256 kB
Committed_AS: 10292968 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 171948 kB
VmallocChunk: 34359565951 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
有人知道发生了什么事吗?
谢谢,
安德烈