會員註冊 / 登入  |  電腦版  |  Jump to bottom of page

Application Server » JDK 6.0 JVM最大記憶體設定

發表人: andowson, 七段學員
2007-01-21 18:58:16
在Javaworld上面看到一篇文章请教高手:Tomact内存设置1.5G不能启动,裡面提到可以用
java -XmxXXXXM -version指令來測試JVM最大的記憶體設定,經過我自己在CentOS 4.4 Linux上面測試後發現JDK 6.0可以支援到2690M

[andowson@www bin]$ java -Xmx2690M -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode)
[andowson@www bin]$ java -Xmx2691M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

但是如果再加上-server參數,則可以再往上擠出10M,達到2700M。
[andowson@www bin]$ java -server -Xmx2700M -version
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Server VM (build 1.6.0-b105, mixed mode)
[andowson@www bin]$ java -server -Xmx2701M -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

發表人: windstorm, 九級學員
2007-05-20 09:32:24
單個JVM記憶体不斷往上設定已經意義不大了,因爲JVM heap size設置過大會影響系統運行性能,而且一般的應用都不需要用到這麽大的Heap size的,除非你的應用存在内存洩漏的情況。

並發用戶量比較大的應用應該通過集群的方式解決問題。

發表人: andowson, 七段學員
2007-05-20 22:42:12
當初的考量是:現在的伺服器配備的記憶體都是以GB作單位了,而且記憶體也很便宜,如果買了有4GB記憶體的伺服器,但是只跑了一個JVM,會不會造成浪費?或是如果覺得系統效能不彰,想要提升效能,增加記憶體是否會遇到Java本身設計上的上限而造成浪費?

發表人: windstorm, 九級學員
2007-05-21 07:10:50
JVM heap size的大小限制是跟操作系統有關係的,主要還是受操作系統單個進程可用内存大小限制。
如果JVM heap size設置過大在JVM heap回收内存的時候會導致整個系統停頓一段時間,所以JVM heap size大小的調整是以滿足應用需要為目的。除非你的JVM支持多綫程回收内存,並且設置JVM參數讓JVM在系統CPU空閒的時候部分回收JVM heap内存,否則過大的JVM heap size勢必影響系統性能。

發表人: andowson, 七段學員
2007-05-22 08:09:56
我同意您的觀點,有關JVM參數的調整,我搜尋了一下heap size,發現有幾篇不錯的參考資料
JVM Tuning
smilieXms建議等於Xmx
smilieXmn要小於Xmx
smilieHeap size 不能決定JVM真正使用記憶體的大小,實際上會更大
Memory usage=Stack Size+Heap Size+Code Size
smilie調整Stack size的參數是Xss

Modifying the JVM heap size
IBM的這篇文章有一些實體記憶體大小對應Heap Size設定的參考數字,最大值大約是實體記憶體的一半左右。




會員註冊 / 登入  |  電腦版  |  Jump to top of page