服务器CPU占用率过高问题分析
在開發(fā)過程中,碰到了Java進(jìn)程占用cpu過高的現(xiàn)象,本篇來介紹一下排查思路。
1. 查看占用CPU過高Java進(jìn)程
使用 top -p <pid> 命令(為Java進(jìn)程的id號)查看Java進(jìn)程的cpu占用:
該Java進(jìn)程占用cpu達(dá)到100%。
top -p <pid>2. 查看進(jìn)程是所有線程的情況
使用 top -Hp <pid> 命令(為Java進(jìn)程的id號)查看該Java進(jìn)程內(nèi)所有線程的資源占用情況:
此處按照cpu排序??梢钥吹?#xff0c;有線程占用cpu很高。
top -Hp <pid>3. 查看線程的16進(jìn)制
使用 printf "%x\n" <tid> 命令(tid指線程的id號)將以上10進(jìn)制的線程號轉(zhuǎn)換為16進(jìn)制:
printf "%x\n" <tid>轉(zhuǎn)換后的結(jié)果分別為4ea0,由于16進(jìn)制以0x開頭,所以對應(yīng)的16進(jìn)制的線程號為0x4ea0。
4. 獲取線程快照
使用命令jstack獲取此時的線程快照并輸入到文件中: jstack -l <pid> > ./jstack_20201207001.txt 命令(為Java進(jìn)程的id號)來獲取線程快照結(jié)果并輸入到指定文件。
jstack -l <pid> > ./jstack_20201207001.txt5. 在線程快照文件中查找指定線程
查看生成的txt文件,在其中搜索tid為0x4ea0的線程:
該線程的堆棧較深,且很明顯有調(diào)用我們自己代碼的邏輯,并且提示了具體的代碼行數(shù),我們查看該處代碼.
總結(jié)
top命令定位CPU高占用代碼
步驟如下:
總結(jié)
以上是生活随笔為你收集整理的服务器CPU占用率过高问题分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html相册图片模板,照片相册HTML模
- 下一篇: 网管工作经验