Tomcat
一個頑皮的數據庫應用程序會導致 Tomcat 崩潰嗎?
我們有許多通過 Tomcat 執行的 Web 服務,它們使用 hibernate/mysql。我懷疑他們中的一些人沒有正確配置連接池,因為幾個小時後,一些單獨的應用程序會耗盡連接並停止響應。我們一直在對連接池服務(在本例中為 C3P0)進行更改,但我們仍需要將舊版本的應用程序保留在伺服器上以實現向後兼容性。
無論如何,我懷疑這些應用程序也在損害 tomcat 的整體穩定性。大約每週一次,我們的伺服器完全停止響應,甚至無法提供靜態頁面。重新啟動服務後,一切都會再次執行幾天左右。查看日誌幾乎沒有發現任何未擷取的異常,所以我不確定是什麼導致 tomcat 崩潰。遺憾的是,在伺服器退出響應之前,錯誤日誌中沒有列出任何值得注意的東西。
我們也在考慮改用 JBoss,因為它有點“企業化”,但我不相信它會解決這些問題。是否有任何令人信服的理由來切換網路平台,或者我應該在我們自己的網路應用程序中進一步調試?此外,webapp 是否有可能通過做壞事使應用程序伺服器崩潰?
伺服器配置:Windows 2003 伺服器、Tomcat 6.0.18 + blazeDS 3.0、Hibernate 3.2。
我認為沒有人會回答您的問題,而只有線索和想法。這裡有一些:
- 您需要能夠檢查您服務的每個部分的健康狀況的機器人。(測試與數據庫的單個連接,獲取靜態網頁,獲取動態網頁……)。這樣,您將看到首先中斷或響應時間增加的情況。
- 你有監控/統計服務嗎?您需要跟踪“活動數據庫連接數”、“活動 Web 會話數”、“tomcat 執行緒數”、“可用記憶體”、CPU ……
我的建議,沒有tomcat程序,因為它們都在等待資源(可能是數據庫連接,或者它們只是一個無限循環!)。我之前列出的工具肯定會幫助您了解為什麼您的伺服器每週都在緩慢當機。
- 在您的伺服器上執行
netstat
並查看與數據庫伺服器的連接數(並根據您的池大小和數據庫伺服器容量檢查它)。- 在您的應用伺服器上執行 jstack 並對它們進行剪切/grep/排序以查看您的執行緒在做什麼。