這篇文章將為大家詳細(xì)講解有關(guān)Java進(jìn)程cpu頻繁100%的解決方法,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
我們一直強(qiáng)調(diào)做網(wǎng)站、網(wǎng)站制作對(duì)于企業(yè)的重要性,如果您也覺(jué)得重要,那么就需要我們慎重對(duì)待,選擇一個(gè)安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過(guò)程中的有力推手。專業(yè)的建站公司不一定是大公司,創(chuàng)新互聯(lián)作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。1.在一次周末收到部門的反饋,線上機(jī)器java進(jìn)程的cpu會(huì)頻繁100% 監(jiān)控系統(tǒng)發(fā)了很多報(bào)警郵件,于是登錄跳板機(jī)進(jìn)行排查解決2.使用top命令查看進(jìn)程情況
發(fā)現(xiàn)每隔個(gè)幾秒cpu就達(dá)到100%左右,報(bào)警郵件確實(shí)是誠(chéng)不欺我,java進(jìn)程有問(wèn)題
2.于是查看下到底是java進(jìn)程下的哪個(gè)線程造成的cpu頻繁100%
使用top -Hp 25567 查看進(jìn)程下的線程信息
得到線程編號(hào)26250
3.查看該線程的棧信息
printf '%x\n' 26250 獲取26250的16進(jìn)制數(shù)為668a
jstack25567 |grep -A 30668a 得到該線程棧信息
ContainerBackgroundProcessor[StandardEngine[Catalina]] 這是什么任務(wù),沒(méi)見(jiàn)過(guò)啊,懵了
繼續(xù)看下面的棧信息有apache.catalina之類的信息(上圖沒(méi)有截全)
我們的java服務(wù)是通過(guò)war包的形式發(fā)布到tomcat里的,想著是不是因?yàn)閠omcat配置的問(wèn)題
先網(wǎng)上查一下吧(吃了不了解tomcat底層的虧)
4.根據(jù)網(wǎng)上的資料,有一種說(shuō)法說(shuō)是因?yàn)閠omcat的server.xml的reload屬性設(shè)置為了true,那么reload屬性有什么作用呢?
如果這個(gè)屬性設(shè)為true,tomcat服務(wù)器在運(yùn)行狀態(tài)下會(huì)監(jiān)視在WEB-INF/classes和WEB-INF/lib目錄下class文件的改動(dòng),如果監(jiān)測(cè)到有class文件被更新的,服務(wù)器會(huì)自動(dòng)重新加載Web應(yīng)用。在開(kāi)發(fā)階段將reloadable屬性設(shè)為true,有助于調(diào)試,但這樣用會(huì)加重服務(wù)器運(yùn)行負(fù)荷,建議在Web應(yīng)用的發(fā)存階段將reloadable設(shè)為false。
看到這趕緊和其他節(jié)點(diǎn)的tomcat配置對(duì)比一下,發(fā)現(xiàn)其他節(jié)點(diǎn)的reload都配置為false,只有這一臺(tái)有問(wèn)題了的設(shè)置為了true。
什么也不說(shuō)了修改reload為false進(jìn)行重啟,當(dāng)然如果真的不是因?yàn)閞eload配置導(dǎo)致cpu頻繁100%的話,設(shè)置reload為false對(duì)系統(tǒng)也是有好處的。
5.修改reload為false進(jìn)行驗(yàn)證
修改配置重啟后果然沒(méi)有再頻繁出現(xiàn)cpu 100%了,至于為什么運(yùn)行這么久監(jiān)控系統(tǒng)才發(fā)通知郵件呢,后來(lái)做監(jiān)控的小伙伴說(shuō)是因?yàn)樗麄兡沁呅畔⒉杉隽藛?wèn)題,沒(méi)有發(fā)現(xiàn)。
關(guān)于Java進(jìn)程cpu頻繁100%的解決方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。