• 如何排查CPU占用太高


     线上项目运行时,出现问题不像在本地那么容易排查,经常需要借助日志、或者一些工具来找出问题。cpu被占满我们经常会遇到。比如我们有这样一段代码:

     1 public Class Demo1_16 {
     2 
     3     public static void main(String[] args) {
     4 
     5         new Thread(null, () -> {
     6         System.out.println("...");
     7         while(true) {
     8             
     9         }
    10      }, "thread1").start;
    11    }
    12 }

    具体排查方法就是:

    • top 命令定位进程,比如图中32655进程占用了97.7%

    • 接着可以用 "ps H -eo pid, tid, %cpu | grep 进程id" 命令定位具体线程

    • 最后用jvm命令  "jstack 进程id" ,根据线程id找到有问题的线程(10进制转换为16进制),具体到源代码行数。"thread3"这样开头的是我们自己写的程序,其他样式的是虚拟机线程,名称是固定的。

    接着要将进程id转换为16进制,比如 32655 --> 0x7f99,也就是 “thread1”,具体到第8行代码有问题, 就是while死循环的问题。

  • 相关阅读:
    自动化运维-ansible
    Linux中安装wget命令
    Celery
    SQLAlchemy
    非关系型数据库--MongoDB
    Flask框架
    Redis
    公钥与私钥
    win10 文件扩展名的更改
    if 和 elif 的区别
  • 原文地址:https://www.cnblogs.com/fly-bryant/p/13260286.html
Copyright © 2020-2023  润新知