首先查看系统资源占用信息,TOP看一下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fYErCSi4-1585028520858)(C:/Users/zhrt/AppData/Local/YNote/data/qqB3B79EED5C527809AC4CBBEA9D0CC0AA/7214e7ac525d4d009ab1d7b49e36caa3/clipboard.png)]
发现正在运行的JAVA项目CPU占用率很高,百分之200左右了,那么问题一定出在这个程序中
命令:查询那个线程CPU占用率很高
ps -mp pid号 -o THREAD,tid,time|more
ps -mp 30871 -o THREAD,tid,time|more
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Np816Uyh-1585028520860)(C:/Users/zhrt/AppData/Local/YNote/data/qqB3B79EED5C527809AC4CBBEA9D0CC0AA/ca093c591c03433c80a138415be359b4/clipboard.png)]
再通过ps命令查看这个程序的线程信息,tid代码线程ID,time代表这个线程的已运行时间
由上面TOP可知进程ID为15669
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMCleg6D-1585028520861)(C:/Users/zhrt/AppData/Local/YNote/data/qqB3B79EED5C527809AC4CBBEA9D0CC0AA/20617f45a6fb4c3f94767b2945ec43d0/clipboard.png)]
于是可以看到这个进程中有3个线程的CPU占用率很高,并且它们目前也运行了13分钟了,它们的TID分别为16068,16069,16071
进制转换,2HEX
再将这3个TID转为16进制,为等会在jstack中查找方便
printf “%x\n” 14028
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aRqqojR7-1585028520863)(C:/Users/zhrt/AppData/Local/YNote/data/qqB3B79EED5C527809AC4CBBEA9D0CC0AA/2a5ea1486d5f4143bd00fbfbe0253863/clipboard.png)]
得到这三个数的16进制为别为3ec4,3ec5,3ec7
jstack查看进程信息
有了线程ID的16进制后,再在jstack中查看进程堆栈信息(之所有拿到TID信息,主要是为了查找方便)
通过jstack -pid 再grep查询
jstack 13829|grep -C 80 0x37af #前后查80行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yWqVT4ME-1585028520866)(C:/Users/zhrt/AppData/Local/YNote/data/qqB3B79EED5C527809AC4CBBEA9D0CC0AA/4924d3791a1d4b6cadf061462a530167/clipboard.png)]
从这里能看出,这3个线程目前还处于运行状态的
再通过jstack查看详细点的信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nFDzhDRs-1585028520873)(C:/Users/zhrt/AppData/Local/YNote/data/qqB3B79EED5C527809AC4CBBEA9D0CC0AA/b6ba86011c0f4b749716107bbacd1f2b/clipboard.png)]
其中显示出了较为详细的代码信息
例如短网址gc
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KKaMH3R1-1585028520875)(C:/Users/zhrt/AppData/Local/YNote/data/qqB3B79EED5C527809AC4CBBEA9D0CC0AA/e0afd0c7edf643aebbd6108b639deb16/clipboard.png)]
本地代码问题排查
开发仔细看了代码后,才发现了问题;此处的代码问题在于:如果paramMap不为空,但dateParamMap为空的,那么程序就会出现死循环。真是一个大BUG啊!