javacpu,JavaCPU使用率过高

发布时间:2022-11-28

本文目录一览:

  1. java占用cpu高?
  2. Java的多线程和CPU
  3. Java中CPU占用过高问题如何解决

java占用cpu高?

java进程占用CPU过高常见的两种情况:

  1. 代码中有死循环或者接近死循环的操作
  2. 快速创建大量临时变量,导致频繁触发gc回收

Java的多线程和CPU

CPU对于各个线程的调度是随机的(分时调度),而在Java中,JVM负责线程的调度,可更好地分配CPU的使用权。对于线程的调度一般有两种模式,分时调度和抢占式调度。分时调度是按照顺序平均分配;抢占调度是按照优先级来进行分配。

Java中CPU占用过高问题如何解决

方法1

  1. jps 获取Java进程的PID。
  2. jstack pid java.txt 导出CPU占用高进程的线程栈。
  3. top -H -p PID 查看对应进程的哪个线程占用CPU过高。
  4. echo “obase=16; PID” | bc 将线程的PID转换为16进制,大写转换为小写。
  5. 在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。
  6. 分析负载高的线程栈都是什么业务操作。优化程序并处理问题。

方法2

  1. 使用top 定位到占用CPU高的进程PID
    top
    
    ps aux | grep PID
    
  2. 获取线程信息,并找到占用CPU高的线程
    ps -mp pid -o THREAD,tid,time | sort -rn
    
  3. 将需要的线程ID转换为16进制格式
    printf "%x\n" tid
    
  4. 打印线程的堆栈信息
    jstack pid |grep tid -A 30