Tomcat假死的原因分析及解決方案
Tomcat假死的原因分析及解決
在參與搜人項目時,遇到tomcat假死的問題。
當(dāng)時情況:
1、ps tomcat正在運行
2、用netstat 查看8080連接情況,有大量的close-wait,還有一些等待連接的狀態(tài)
3、查看服務(wù)器的使用情況,沒有過多的消耗內(nèi)存和CPU
4、重新加載界面,沒有報錯,只是顯示加載失敗
5、加載時看到tomcat 日志報錯 out of memary
在網(wǎng)上查看資料,問題得到解決
服務(wù)器配置:linux+tomcat
現(xiàn)象:Linux服務(wù)器沒有崩,有瀏覽器中訪問頁面,出現(xiàn)無法訪問的情況,沒有報4xx或5xx錯誤(假死),并且重啟tomcat后,恢復(fù)正常。
原因:tomcat默認(rèn)最大連接數(shù)(線程數(shù))200個,默認(rèn)每一個連接的生命周期2小時(7200秒),tomcat使用http 1.1協(xié)議,而http1.1默認(rèn)是長連接。
tomcat接受處理完請求后,socket沒有主動關(guān)閉,因此如果在2小時內(nèi),請求數(shù)超過200個,服務(wù)器就會出現(xiàn)上述假死現(xiàn)象。
解決方案1
及時斷開socket
解決方案2
修改tomcat配置文件,修改最大連接數(shù)(增大)
修改server.xml配置文件,Connector節(jié)點中增加acceptCount和maxThreads這兩個屬性的值,并且使acceptCount大于等于maxThreads:
protocol="org.apache.coyote.http11.Http11NioProtocol"
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" acceptCount="500" maxThreads="400" />
解決方案3
修改linux的TCP超時時間(socket生命周期)限制
vi /etc/sysctl.conf # Decrease the time default value for tcp_fin_timeout connection net.ipv4.tcp_fin_timeout = 30 # Decrease the time default value for tcp_keepalive_time connection net.ipv4.tcp_keepalive_time = 1800 # 探測次數(shù) net.ipv4.tcp_keepalive_probes=2 # 探測間隔秒數(shù) net.ipv4.tcp_keepalive_intvl=2 編輯完 /etc/sysctl.conf,要重啟network 才會生效 [root@temp /]# /etc/rc.d/init.d/network restart
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Tomcat報錯: JDBC unregister 解決辦法
這篇文章主要介紹了Tomcat報錯: JDBC unregister 解決辦法的相關(guān)資料,需要的朋友可以參考下2017-05-05Tomcat在linux環(huán)境中開機自啟(定時重啟)的方法
我們經(jīng)常會遇到服務(wù)器斷電或異常,而異常后tomcat中部署的web項目需要我手動去啟動,為此,特別貢獻出Linux環(huán)境中Tomcat開機自啟的方式供學(xué)習(xí)使用,需要的朋友可以參考下2023-10-10使用TomCat,service輸出臺出現(xiàn)亂碼的解決
本文介紹了解決Tomcat服務(wù)輸出臺中文亂碼問題的兩種方法,第一種方法是修改`logging.properties`文件中的`prefix`和`encoding`參數(shù);第二種方法是配置IDEA的VMoptions和文件編碼設(shè)置,通過這兩種方法,可以有效解決Tomcat服務(wù)輸出臺出現(xiàn)的亂碼問題2025-01-01Tomcat之web應(yīng)用的目錄組成結(jié)構(gòu)_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了Tomcat之web應(yīng)用的目錄組成結(jié)構(gòu),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07