【发布时间】:2014-06-14 21:26:46
【问题描述】:
我有一个在 RHEL 的 glassfish 中运行的 Web 应用程序。对于应用程序,这些设置:
Heap Memory:4GB
Perm Gen:1GB
JConsole 显示:
heap memory - 500mb
non heap memory - 350mb
threads =378
热门节目:
PID User PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17948 root 20 0 12.8g 1.9g 22m S 1.5 16.0 14:09.11 java
从启动本身进程消耗12.8G。
顶部还显示:
Mem: 12251392k total, 11915584k used, 335808k free, 47104k buffers
Swap: 8322944k total, 6747456k used, 1575488k free, 177088k cached
问题是交换空间不断增加。当没有剩余交换空间时,Web 应用程序停止响应。
- 杀死进程不会减少使用的交换空间,但只会在计算机重新启动后减少。为什么?
- 为什么进程在启动时会消耗 12.8 GB 的虚拟空间?
- 如何解决这个问题?
更新:
jconsole 输出(记录 24 小时)显示堆内存和非堆内存没有增加太多。即使交换空间在同一时期减少了 1.5Gb: Jconsole output
【问题讨论】:
标签: java memory glassfish swap virtual-memory