我目前在Jetty中運行Grails應用程序。它工作正常,但是比我想要的記憶更多。Grails應用程序佔用的內存超過可能嗎?
htop
表明碼頭正在運行,像這樣:java -server -Xmx256m -Xms256m -Xmn96m -XX:MaxPermSize=64m -Djetty.home=/home/...
在我看來,那麼,該碼頭可以利用可能的最大內存應該約256 + 64 = 320 MB
。相反,它看起來是這樣的:
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 6256 jetty 20 0 2747M 623M 13732 S 0.0 31.3 1:28.06 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java -server -Xmx256m -Xms256m -Xmn96m -XX:MaxPermSize=64m -Djetty.home=...
很顯然,我不會期望的內存使用量是完全320 MB,但它不應該是接近?爲什麼它會是預期記憶的兩倍?如果有的話,當堆填滿時,Java不應該拒絕分配更多空間嗎?
我想看看exaftly發生了什麼事情與jmap
,但一切看起來我的權利:
# jmap -heap 6256 Attaching to process ID 6256, please wait... Debugger attached successfully. Server compiler detected. JVM version is 23.7-b01 using thread-local object allocation. Parallel GC with 4 thread(s) Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 268435456 (256.0MB) NewSize = 100663296 (96.0MB) MaxNewSize = 100663296 (96.0MB) OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 67108864 (64.0MB) G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 65208320 (62.1875MB) used = 33343488 (31.798828125MB) free = 31864832 (30.388671875MB) 51.13379396984924% used From Space: capacity = 17170432 (16.375MB) used = 0 (0.0MB) free = 17170432 (16.375MB) 0.0% used To Space: capacity = 18284544 (17.4375MB) used = 0 (0.0MB) free = 18284544 (17.4375MB) 0.0% used PS Old Generation capacity = 167772160 (160.0MB) used = 132604224 (126.46124267578125MB) free = 35167936 (33.53875732421875MB) 79.03827667236328% used PS Perm Generation capacity = 67108864 (64.0MB) used = 55899320 (53.30974578857422MB) free = 11209544 (10.690254211425781MB) 83.29647779464722% used 26872 interned Strings occupying 2932096 bytes.
據我所知,無論是燙髮根空間也不是堆空間都滿了。那麼〜400MB內存被用於什麼?有什麼我可以在我的Grails應用程序或Jetty中改變以減少它?
我以前在Jetty上運行過Grails應用程序,內存使用率很低。剛剛選中了一個,它使用了220 MB的內存,所以我不確定我做錯了什麼。
它看起來像別的東西出錯了。我有另一臺運行Grails的服務器共有220 MB的內存(RES),但我無法得到這個運行相同應用程序的600 MB以下的內存。類似的Grails和Jetty版本,相同的操作系統,都是64位等。 – 2013-03-08 16:15:39
兩個實例使用相同的數據集?類似的要求?相同的負載? – 2013-03-09 21:13:55
剛剛測試過。完全相同的應用程序,完全沒有負載,根本沒有數據,此時只是空表。相同版本的Grails。 – 2013-03-10 02:36:17