• Java服务CPU飙到99%问题排查


    最近生产环境中出现了一起CPU突然飙升的事件,下面介绍一下 CPU飙升问题排查的过程和解决方法。

    该方案参考自:https://www.jianshu.com/p/e96c74133be6,感谢路遥Neo的分享

    一、查看导致CPU飙升的线程

    首先需要定位到是服务里的那些线程导致CPU飙升的。具体查找方法:
    1、在服务器上通过命令行输入 top 命令可以查到服务的进程号。

    (输入top回车,然后按下大写M按照memory排序,按下大写P按照CPU排序)

    如上,占用CPU最多的进程ID是:18507

    2、查到对应的进程号,通过top -H -p $pid,可以看到具体是哪个线程占用了CPU,记下该线程的id。

     

    这里查询结果列PID 就是线程ID 如上占用CPU最多的线程ID是: 18599

    二、查看对应线程的java堆栈信息

    1. 在服务器上 使用 jstack pid  > /tmp/log.txt  命令查看线程堆栈信息

    如:jstack 18507 > /tmp/log.txt

     

    2. 根据线程id 查询在日志文件中,查看堆栈信息

    (由于堆栈日志 线程id是16进制的,所以需要先将10进制的线程id转为16进制)

    如 18599 的16 进制是 ox48a7,根据关键词:nid=0x48a7 搜索日志

  • 相关阅读:
    Spring shiro 初次使用小结
    Spring data Redis
    Redis 学习相关的网站
    Spring依赖注入 — util命名空间配置
    添加至数据库的中文显示问号
    freemarker的classic_compatible设置,解决报空错误
    HTTP协议
    Maven添加本地Jar包
    java中的字符串分割函数
    读取文件方法大全
  • 原文地址:https://www.cnblogs.com/nov5026/p/10696819.html
Copyright © 2020-2023  润新知