工作中遇到关于java高内存问题,查找到一些常用的定位命令,记录一下:

    (1) top: 查看系统基本状态和所有进程运行状态(实时,3秒刷新),可以看到是哪个进程占用cpu高

    

java cpu占用率持续升高 java cpu占用高的原因_百度

    (2) ps -mp PID

PID是上面找到的进程号,此命令可以查看占用高CPU的进程内部具体是哪些线程(TID)在占用CPU,看哪些线程的时间很长;

    

java cpu占用率持续升高 java cpu占用高的原因_百度_02

   TID

TID,将其转换为16进制格式  

              

java cpu占用率持续升高 java cpu占用高的原因_百度_03

    (4) jstack PID |grep 16进制

注意如果太多,建议输出到文件中,拿到本地使用工具阅读)  

             

java cpu占用率持续升高 java cpu占用高的原因_16进制_04

          (5)如果使用以上步骤,仍然只能定位到在频繁fullGC(系统存在内存泄漏,代码有问题),那么可能需要下载详细内存文件来具体分析,命令为:

PID

              此文件需要使用插件打开,可自行百度(Eclipse可以使用MAT插件分析,其他的自行百度)