一 Tomcat卡住不響應請求但未拋出異常
原文地址:https://blog.csdn.net/L_BestCoder/article/details/79208514?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param
前段時間在做一個android平台的QQ,服務器端是跑在Tomcat上的,但是每次測試一會,Tomcat就會卡住,不在響應任何請求,包括HTTP請求和TCP請求都不在響應。
后來想到可能是連接池占滿了,而且都未被釋放,就通過系統命令查看了一下Tomcat監聽的8080端口和Netty服務器監聽的52621端口(自定義的),發現有一大堆ESTABLISHED的連接,而且很多都是源於同一個ip地址,說明android端在發起HTTP請求或者TCP請求后都未把連接關閉,最后把該及時close的和disconnect的都做了處理。就不會出現這樣的情況了。
附上端口連接檢查命令:
windows:
netstat -aon|findstr "8080"
linux:
netstat -na | grep ESTAB | grep 8080 | wc -l
二 tomcat 無法及時響應,http 請求一直pending狀態
原文地址:https://blog.csdn.net/u012402177/article/details/81004539
新起了一個tomcat,為前端調用服務,剛起來后一會不知為何,前端告知http請求一直是pending狀態,因為一不小心點擊控制台里面的時候,會變成正在編輯,tomcat就不跑了,窗口設置默認選擇了 “快速編輯模式,選項去掉,就可以了,(需要重啟,不然選項即使去掉 對當前窗口不生效),解決!!!
三 pendding狀態解決過程
1.jstack pid抓取jvm線程狀態 2.查看結果,發現很多線程在等待waiting to lock <0x0000000716821260> (a org.hibernate.util.SoftLimitMRUCache)鎖; 3.其中有一個是加鎖線程:- locked <0x0000000716821260> (a org.hibernate.util.SoftLimitMRUCache); 4.查詢waiting to lock <0x0000000716821260> (a org.hibernate.util.SoftLimitMRUCache),發現此問題為hibernate3.1.X的bug,多線程不安全,可能出現死循環。