我試圖比較我在32位窗口和64位Linux上的java web應用行爲。在64位Linux上發生意外的JVM行爲
當我通過jconsole查看內存使用情況時,我發現內存使用情況非常不同。 在windows上,appl永遠不會碰到512m。 但是,當我運行64位的64位虛擬機的linux 64位內存保持逐漸增加,並非常快速地達到1000米左右的峯值,並且我還得到了與超過頭部限制的GC相關的oome錯誤。在Linux上,當我手動運行GC時,它會降到低於100米。
它像GC一樣運行得很好,因爲它在Windows上運行得很好。
在windows上,應用運行得更好,負載更大。
我如何找到背後的原因?使用
蔭jdk1.6.0.13
最小堆:512米和最大堆1024米
編輯:
您使用的Windows和Linux上的同一個JVM版本?
- yes.1.6.0.13。
您是否在兩個系統上使用相同的垃圾回收器?
- 我注意到在jconsole中,我發現gc是不同的。
您是否在兩個系統上使用相同的Web容器?
- yes.Tomcat。
您的web應用程序是否依賴本機庫?
- 不確定。我使用tomcat + spring + hibernate + jsf。
在這兩個平臺上,您的webapp的配置是否存在其他差異? 否
與OOME相關的錯誤信息究竟是什麼?
- java.lang.OutOfMemoryError:GC開銷超過限制
多久採取你的webapp啓動行爲不端在Linux /報告錯誤?
- 使用模式的差異可以看出,我離開它跑了3小時後。這個錯誤出現在一天或兩天之後,然後平均內存使用率達到900 mb左右。
您是否看到與Linux上的32位JVM具有相同的行爲? – 2010-07-31 15:48:25
是的,我已經嘗試過64位linux上的32位jvm,並且與64位jvm相比,gc似乎更經常發生,但仍然與Windows(32位)相比,內存使用似乎朝着最大限制變高。 – jch 2010-07-31 16:01:23