2016-08-11 141 views
1

我有一個使用jsp在java web服務器上構建的瀏覽器遊戲。Java Web服務器突然停止響應,沒有任何異常

我添加了一個新的模塊,它使用了一些http會話對象並保留其中的數據。但是,運行3-4小時後,它會突然停止工作並凍結。當我檢查錯誤日誌時,我沒有看到任何異常拋出。

服務器有一會兒在線50-60。

我使用監測VisualVM的服務器,並在這裏爲4小時後的結果,直到它停止:

enter image description here

我設置的最大內存爲1024MB。正如你所看到的,它的問題不在於內存。

我注意到的事情是服務器停止時線程數增加了。

根據截圖,我應該懷疑httpsession對象嗎?爲什麼服務器停止響應?

+1

檢查jconsole上的「死鎖檢測」。 – MGorgon

+0

在停止響應的那一刻? – ftb

回答

1

它看起來像系統限制或死鎖。

您的線程圖看起來像有問題:活動線程的數量很重要,永遠不會減少。 Web應用程序應該是無狀態的。當請求到達時,活動踏板數應該增加,但當請求完成時,活動踏板數也會減少。
我的印象是你的應用程序中沒有這種印象。

MGorgon是正確的。

您還應該檢查jconsole中的「死鎖檢測」。

如果您使用的是JDK 6+版本,則可以使用ThreadMXBean。它有一個findDeadlockedThreads()方法和其他有趣的方法來解決您的需求。無論如何,如果它不是死鎖,爲了獲得更多關於問題原因的信息,我建議你在系統日誌中查看你的操作系統是什麼。你會有可能有趣的事情。

+0

感謝您的詳細解答。但我無法獲得「死鎖檢測」部分。我應該在系統運行時檢查它,還是應該及時使用問題?因爲當我在正常運行時間嘗試它時,它會顯示「沒有檢測到死鎖」。 – ftb

+0

不客氣。有趣的主題:) 你有jconsole中的按鈕(在線程標籤中),而不是在jvisualvm中。它們是jdk的同一'bin'目錄中的兩個不同的可執行文件。 – davidxxx

+0

哦,我想我不能解釋:)我已經使用JConsole和線程選項卡中的「檢測死鎖」按鈕:)我的問題是我應該何時應用這個?當我的網站停止響應或任何時候啓動時? – ftb