2013-01-18 23 views
-1

可能重複:
How to set the maximum memory usage for JVM?Linux的內存問題。與Java程序

我運行一個Java程序,但是當內存佔用率達到26.1%,它不會增加任何更多程序變得非常緩慢。

可能是什麼問題? java是否有內存使用限制?或者每個應用在linux上的內存是否有限制?

Java版本 「1.7.0_11」 的Java(TM)SE運行時環境(建立1.7.0_11-B21) 爪哇熱點(TM)64位服務器VM(構建23.6-B04,混合模式)


Tasks: 126 total, 1 running, 125 sleeping, 0 stopped, 0 zombie 
Cpu(s): 97.5%us, 0.4%sy, 0.0%ni, 2.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 33018800k total, 9522548k used, 23496252k free, 12100k buffers 
Swap: 32764528k total,  0k used, 32764528k free, 391812k cached 
    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
3463 wonn24 20 0 8769m 8.2g 9.8m S 391.3 26.1 257:09.24 java 
3725 hong8e 20 0 14876 1148 872 R 0.3 0.0 0:01.81 top 
    1 root  20 0 4088 972 720 S 0.0 0.0 0:00.71 init 
    2 root  15 -5  0 0 0 S 0.0 0.0 0:00.00 kthreadd 
    3 root  RT -5  0 0 0 S 0.0 0.0 0:00.17 migration/0 
    4 root  15 -5  0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 
    5 root  RT -5  0 0 0 S 0.0 0.0 0:00.00 watchdog/0 
    6 root  RT -5  0 0 0 S 0.0 0.0 0:00.15 migration/1 
    7 root  15 -5  0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/1 
+0

粘貼這裏的代碼..或嘗試java分析在ur結尾 – Rajesh

回答

3

默認情況下,Java的服務器版本的最大堆大小爲主內存的1/4。由於庫和線程堆棧的開銷很小,這可能很容易成爲主存的26%或27%。

當您的JVM開始填滿時,執行GC所花費的時間會更少,而空閒內存越低意味着它也會更頻繁地出現(所以非常糟糕)理想情況下,實際使用率可能低至最大值的40%尺寸。在你的情況下,你的實際使用量至少可以達到7GB。

我建議您嘗試將您的最大堆大小增加到至少16 GB,如果您可以節省內存,可能需要24 GB。即-Xmx16g-Xmx24g

+0

[官方網頁上的Java](http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html)不記錄'mx'選項。 –

+0

@MarkoTopolnik但它確實表示'-X'選項是「非標準」。 '-mx'選項是從Java 1.1保留下來的,它是一個文檔選項。它在理論上被放棄了,所以選項可能是非標準的,然而「非標準」的「-Xmx」選項是標準的,而「標準」的「-mx」選項是非標準的。 :P –

+0

最後,我使用最簡單的選項,因爲'-mx'像Java一樣支持'-ms',並且不會很快消失。 –

1

默認情況下,Java有64兆的堆大小限制(如果存儲服務器...)你可以用命令行參數增加,但在此之前,確保你需要額外的內存和Don」沒有泄漏。

+0

儘管32位窗口的最大內存默認爲64 MB,但他已經在UNIX上使用8 GB,因此它不會這裏不適用。從來沒有更少的解決方案是適當的,所以+1 –