我有一個運行在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
謝謝!我更新了Jconsole輸出的問題。 swaoff -a給出這個錯誤:swapoff:/ dev/mapper/VolGroup-lv_swap:swapoff失敗:無法分配內存。我猜想它是因爲RAM沒有足夠的空間來容納交換內容。 – user3516088
swapoff給出錯誤:是的,似乎你的機器缺少物理內存。在這段時間內,屏幕截圖上的堆內存使用情況對我來說確實很好。燙髮/非堆使用情況如何?根據jconsole, – mdo
均小於500 mb。當我運行vmstat時,它顯示block io(bi/bo)中的活動,si/so(swap io)中沒有變化。由於進程內存正常運行,io是否可能導致交換空間使用量增加? – user3516088