cpu占用率高排查知识点

1. 使用top命令查看cpu占用高的进程

cpu使用率参数含义:

%us:us:用户空间占用CPU的百分比。简单来说,高我们是由程序引起的。通过分析线程堆栈很容易找到有问题的线程。

%sy:内核空间占用CPU的百分比。当sy为高时,如果它是由程序引起的,那么它基本上是由于线程上下文切换。

%ni:表示用户空间且通过nice调度过的程序的cpu使用率。

%id:空闲cpu

%wa:cpu运行时在等待io的时间

%hi:cpu处理硬中断的数量

%si:cpu处理软中断的数量

%st:被虚拟机偷走的cpu

%CPU为什么会超过100%?

%CPU是指进程占每个核的百分比之和,假设你的机器是2个cpu,每个cpu 4核,那么%CPU的最大值可以达到800%

2. 查看某个进程中所有线程的资源占用  top -Hp pid

3. 查看java线程信息

printf "%x " tid  可以获取tid的16进制

jstack pid |grep -A 10 tid的16进制

java进程状态

NEW   // 没有启动过的线程状态,当程序使用 new 关键字创建了一个线程之后,该线程就处于新建状态,此时仅由 JVM 为其分配 内存,并初始化其成员变量的值

RUNNABLE  // 当线程对象调用了 start()方法之后,该线程处于就绪状态。Java 虚拟机会为其创建方法调用栈和 程序计数器,等待调度运行。

BLOCKED  // 阻塞状态,等待锁(monitor lock)

WAITING     //等待状态,等待其他线程的某个操作,例如Object.wait Thread.join

TIMED_WAITING  //带有超时时间的等待状态

TERMINATED   //已终止线程状态

备注:

线程状态为“waiting for monitor entry”:意味着它 在等待进入一个临界区 ,所以它在”Entry Set“队列中等待。
此时线程状态一般都是 Blocked:java.lang.Thread.State: BLOCKED (on object monitor)

如果大量的线程处于BLOCKED(on object monitor) 状态,可能是一个全局锁阻塞了大量线程。

线程状态为“waiting on condition”:
说明它在等待另一个条件的发生,来把自己唤醒,或者干脆它是调用了 sleep(N)。
此时线程状态大致为以下几种:
  • java.lang.Thread.State: WAITING (parking):一直等那个条件发生;
  • java.lang.Thread.State: TIMED_WAITING (parking或sleeping):定时的,那个条件不到来,也将定时唤醒自己。

线程状态为”Object.wait()“:

说明这个线程之前获得了某个monitor,进入临界区,但是发现执行条件不满足,调用object.wait进入Wait Set

此时线程状态大致分为:

  • java.lang.Thread.State:WAITING  (on object monitor)
  • java.lang.Thread.State: TIMED_WAITING (on object monitor)

如果大量的线程在waiting on condition状态,可能是第三方资源迟迟获取不到导致大量线程进入等待状态,比如网络资源等。所以如果你发现有大量的线程都处在 Wait on condition,从线程堆栈看,正等待网络读写这可能是一个网络瓶颈的征兆,因为网络阻塞导致线程无法执行。

获取monitor过程

每个 Monitor在某个时刻,只能被一个线程拥有,该线程就是 “Active Thread”,而其它线程都是 “Waiting Thread”,分别在两个队列 “ Entry Set”和 “Wait Set”里面等候。在 “Entry Set”中等待的线程状态是 “Waiting for monitor entry”,而在 “Wait Set”中等待的线程状态是 “in Object.wait()”。

当线程获得了 Monitor,如果发现线程继续运行的条件没有满足,它则调用对象(一般就是被 synchronized 的对象)的 wait() 方法,放弃了 Monitor,进入 “Wait Set”队列。

参考博客:https://www.cnblogs.com/noteless/p/10372674.html

https://www.cnblogs.com/zhengyun_ustc/archive/2013/03/18/tda.html

原文地址:https://www.cnblogs.com/catpainter/p/12988287.html