2008-10-22 111 views
4

什麼是解決Java虛擬機崩潰的最佳做法,如果後續的條件:如果Java虛擬機重複崩潰,我該怎麼辦?

  • 沒有自己或第三方本地代碼。 100%純java
  • 在許多其他系統上運行相同的程序沒有任何問題。

PS:虛擬機崩潰時,意味着虛擬機寫入一個類似hs_err_pid1234.log的轉儲文件並終止。

+0

which os/platform? (我們知道java是平臺獨立的:-) – Blauohr 2008-10-22 10:56:52

回答

3

更新或替換您的JVM。如果您目前擁有最新版本,請嘗試更舊版本,或者如果您沒有最新版本,請嘗試更新。也許它是你的特定版本中的一個已知問題?

4

讀取hs_err_pid1234.log文件(或任何錯誤日誌文件名稱)。那裏通常有線索。下一步取決於您在日誌中發現的內容。

是的,它可能是您正在使用的JVM實現的特定版本中的一個錯誤,但我也看到了操作系統中內存碎片導致的問題。例如,Windows很容易在不適當的位置安裝dll,並且當JVM因此要求時,無法分配連續的內存塊。其他的opf內存問題也可以通過這種類型的崩潰轉儲來體現。

2

假設JVM版本跨機器是一樣的:

弄清楚什麼是關於在JVM崩潰的機器不同。相同OSOS版本?例如,我們在特定版本的Red Hat上遇到JVM崩潰問題。而且我們還發現一些較舊的紅帽版本無法正確處理額外的內存,導致交換空間不足。 (我們的解決方案是升級RedHat)。

此外,該程序是否在正好跨機器相同的東西?它訪問共享文件系統嗎?文件系統是否類似地安裝在您的機器上(SMB/NFS等)?東西一定是不一樣的。

日誌文件應該讓你知道發生崩潰的位置(例如malloc)。

0

查看轉儲文件中的堆棧跟蹤,因爲它應該告訴您發生崩潰時發生了什麼。

除了挖掘到hs_err轉儲文件,我還會將它提交給Sun或任何製作您的JVM的人(我相信在文件頂部有如何操作的說明?)。它不會傷害。

0

32bit? 64位?客戶機中的ram數量?處理器?操作系統?查看系統之間是否有任何連接。連接可能會導致線索。如果一切都失敗了,請考慮使用不同的主要/次要版本的JVM。另外,如果JUST開始的問題可以通過一段時間(通過版本控制)來避免程序崩潰?查看hs_err日誌,您可能會了解導致崩潰的原因。它可能是JVM使用的其他客戶端庫的一個版本。最後,在調試/配置文件中運行該程序,也許你會在崩潰前看到一些症狀(假設你可以複製它)

相關問題