Linux应用服务导致系统负载过高问题排查
linux服務(wù)器上,用uptime、top查看系統(tǒng)的負(fù)載明顯過高,經(jīng)過排查,發(fā)現(xiàn)是因為代碼中死循環(huán)造成的。具體的排查過程請參照本文。
????使用top命令,發(fā)現(xiàn)load?average指標(biāo)值都在1附近,偏高。當(dāng)然也可以用uptime。用top的好處是可以看到各個進(jìn)程使用資源的一個排名。在top結(jié)果頁面,輸入P,以cpu消耗進(jìn)行排名,發(fā)現(xiàn)有個java進(jìn)程占用了98%的cpu資源。記下該進(jìn)程的pid,通過ps?-f -p pid命令,可以發(fā)現(xiàn)該進(jìn)程是tomcat進(jìn)程,它提供了一個web服務(wù)。
????目前進(jìn)程的信息對我們問題的排查沒有任何幫助,我們需要查看線程的信息。我們知道,jdk提供了對線程的監(jiān)控命令jstack,但是我們直接使用此命令幫助不大。我們可以先找出消耗資源較多的線程,這里又要用到top命令。top命令不僅可以查看進(jìn)程,還可以查看線程。使用top?-p pid,只對該進(jìn)程進(jìn)行監(jiān)控,進(jìn)入界面后,輸入H,可以查看該進(jìn)程下各線程使用資源的情況。截圖如下:
????可以看出線程20591消耗資源較多。
????接下來,我們就需要看看這個線程到底干了什么事情。此時就需要用到j(luò)dk提供的jstack工具了。
????將線程棧打出來:jstack -F pid,截圖如下:
????jstack會將進(jìn)程下所有線程信息打印出來,上圖只是截取了部分線程信息。根據(jù)線程號,可以找到對應(yīng)的線程棧。
????通過線程棧,找到對應(yīng)的java代碼,發(fā)現(xiàn)是因為死循環(huán)導(dǎo)致。修改代碼重新部署,系統(tǒng)恢復(fù)正常。
轉(zhuǎn)載于:https://blog.51cto.com/bosszhang/2139180
總結(jié)
以上是生活随笔為你收集整理的Linux应用服务导致系统负载过高问题排查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react 按照一级路由 分包加载
- 下一篇: 在Oracle Linux 7上通过官方