tomcat 由於 -Xss 太小導致無法載入應用

yexiaobai發表於2014-10-27

最近線上一個應用出現了一個 tomcat 無法載入,卡住了的問題。引起該問題的原因是開發同事的一個老專案新增了一些功能,需要進行上線,首先發布到預釋出環境後,重起 tomcat,發現出現如下現象:

Oct 27, 2014 10:31:14 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-9009"]
Oct 27, 2014 10:31:14 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 586 ms
Oct 27, 2014 10:31:14 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Oct 27, 2014 10:31:14 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.40
10:31:20,011[INFO]MLog:80 MLog clients using log4j logging.

即 tomcat 的日誌顯示,走到 MLog clients using log4j logging 這就不往下走了。

雖然我的預釋出環境沒有做任何變更,但是為了穩妥起見,還是把程式碼在生產叢集中的其中一臺伺服器釋出下,結果表現的現象是一樣的,還是載入不成功。

但是開發同事又說在測試環境是能正常載入的,為了證明不是環境問題,所以讓開發同事先回滾程式碼,回滾後,再發布,能正常載入,所以我讓開發同事排查下程式碼,看是不是程式碼有問題,因為開發同事上線了兩個新功能,所以我讓其把功能拆開了上線釋出,結果是上線其中一個功能能正常載入,上線另外一個不能正常載入,那根據這個可以判斷是另外一個功能的程式碼問題了。但是結果一天的排查,還是不能確定到底是什麼問題。同時開放同事堅決表示測試和開發都沒有問題,為什麼就生產有問題。所以只好繼續從環境入手了。

我最後讓開發把測試環境的 tomcat 配置發給我看下,看是否不一致(最後才檢視 tomcat 配置,是因為我們的環境 tomcat 類似的一直都是測試,預釋出,生產保持一致的,所以當時沒有想到這方面)。最後一對比發現,tomcat 配置的 -Xss 這個值不一樣,預釋出和生產的是設定的 256k,而測試環境是設定的 512k,最後把測試環境的該值調小到與預釋出環境一致。重顯了該現象。因此確定問題,是開發新上線的程式碼執行緒棧用的太大,導致原先設定的不足,需要調大。最後把預釋出和生產環境的 -Xss 調大後,問題解決。

注:運維問題真是不能想當然,要一步步的把所有的差異都對比,然後一一的修正測試。

參考資料:

相關文章