檢查到項(xiàng)目代碼中的問(wèn)題:
1.用戶數(shù)量增加,線程數(shù)量過(guò)多,內(nèi)存吃緊
2.早期為保持?jǐn)?shù)據(jù)同步準(zhǔn)確性,增加的頻繁更新數(shù)據(jù)庫(kù)操作導(dǎo)致連接數(shù)據(jù)庫(kù)數(shù)量過(guò)大。
3.由于改進(jìn)了消息及時(shí)推送機(jī)制,頻繁更新用戶標(biāo)識(shí)組的操作,存在粉絲過(guò)多的大號(hào)推送消息更新非常慢。
原文出處:http://www.blogjava.net/hankchen
現(xiàn)象:
在tomcat中部署Java的web應(yīng)用程序,過(guò)一段時(shí)間后出現(xiàn)tomcat的java進(jìn)程持續(xù)占用cpu高達(dá)100%,導(dǎo)致web程序訪問(wèn)受阻。
可能原因分析:
可能程序確實(shí)在進(jìn)行數(shù)據(jù)計(jì)算;或程序進(jìn)入死循環(huán);
解決方法:
1、先用top查看占用cpu的進(jìn)程id
2、再用ps -ef |grep PID定位具體的進(jìn)程主體;如是否是tomcat啟動(dòng)的java程序
3、用ps -mp pid -o THREAD,tid,time打印出該進(jìn)程下的線程占用cpu情況

找到了耗時(shí)最高的線程28802,占用CPU時(shí)間快兩個(gè)小時(shí)了!
4、其次將需要的線程ID轉(zhuǎn)換為16進(jìn)制格式:
printf "%x\n" tid

5、最后打印線程的堆棧信息:
jstack pid |grep tid -A 30

找到出現(xiàn)問(wèn)題的代碼,并分析具體函數(shù)中是否有可能出現(xiàn)死循環(huán)的代碼段。
通常問(wèn)題出現(xiàn)在while, for之類(lèi)的循環(huán)代碼片段。