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