[英]Unexpected JVM behaviour on 64bit linux
我試圖比較32位Windows和64位Linux上的Java Web應用程序行為。
當我通過jconsole查看內存使用情況時,我發現內存使用情況的圖表非常不同。 在Windows上,應用程序永遠不會觸及512m。 但是,當我在具有64位VM的Linux 64位Linux上運行時,內存會逐漸增加,並很快很快達到峰值約1000m,而且我還收到與超出GC開銷限制有關的oome錯誤。 在Linux上,每當我手動運行GC時,它就會下降到小於100m。
就像GC似乎在Windows上一樣好運行。
在Windows上,該應用在負載更大的情況下運行效果更好。
我如何找到背后的原因?
IAM使用JDK1.6.0.13
最小堆:512m和最大堆1024m
編輯:
您是否在Windows和Linux上使用相同的JVM版本?
您是否在兩個系統上使用相同的垃圾收集器?
您是否在兩個系統上使用相同的Web容器?
您的Web應用程序是否依賴本機庫?
這兩個平台上的Webapp配置是否還有其他差異? 沒有
與OOME相關的錯誤消息到底是什么?
您的Web應用程序開始在Linux上行為不正常/報告錯誤需要多長時間?
可以預料,與32位JVM相比,64位JVM自然會使用更多的內存(畢竟內部指針的大小是其兩倍)。 從32位遷移到64位時,您不能保持相同的堆設置,並且期望相同的行為。
如果您的應用在32位JVM上以512m的速度愉快地運行,則沒有任何理由使用64位JVM。 這樣做的唯一理由是利用巨大的堆大小。
請記住,在64位操作系統上運行32位JVM是完全有效的。 兩者無關。
有太多未知數無法解釋:
另外,我也同意@skaffman的觀點……除非您的應用程序確實需要它,否則請不要使用64位JVM。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.