一、cpu层面进行排查

1. 首先排查哪些进程cpu占用率高。 通过top -c命令显示进程运行信息列表 (按键P按CPU占有资源排序)

Load高问题排查

执行:

jstack 88148 > loop.txt

 2.  查看对应java进程的每个线程的CPU占用率。通过命令:top -Hp 88148

Load高问题排查 

查看到PID为23772,23773和23774的线程占用CPU较高,

这里可能有人有疑惑,为什么线程也有PID啊?其实线程进程都会有自己的ID,这个ID就叫做PID,PID是不特指进程ID,线程ID也可以叫做PID

3.  追踪线程内部,查看load过高原因。将10进制的23772转为16进制,因为jstack中PID用的是16进制

printf "%x" 23772
输出5cdc

4.  打开loop.txt文件,搜5cdc

Load高问题排查

二、查看运行中的队列R,不可中断的睡眠进程D

linux内的进程状态:五种

Linux进程状态:R (TASK_RUNNING),RUNNABLE 可执行状态。
Linux进程状态:S (TASK_INTERRUPTIBLE),可中断的睡眠状态。
Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态。
Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态。
Linux进程状态:Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程

系统有很高的负载但是CPU使用率却很低,或者负载很低而CPU利用率很高,这两者没有直接关系,

在 load 比较高的时候,有大量的 nginx 处于 R 或者 D 状态,他们才是造成 load 上 升的元凶

2、排查僵尸进程步骤:

1):执行top命令,查看zombie进程

Load高问题排查

2) :ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' 、、查找进程状态为Z的进程

Load高问题排查

三、OS 系统层面 检查系统IO

执行iostat

Load高问题排查 

avg-cpu段:
%user:   在用户级别运行所使用的CPU的百分比.
%nice:   nice操作所使用的CPU的百分比.
%sys:    在系统级别(kernel)运行所使用CPU的百分比.
%iowait: CPU等待硬件I/O时,所占用CPU百分比.
%idle:   CPU空闲时间的百分比.

相关文章:

  • 2021-12-04
  • 2022-01-02
  • 2021-08-12
  • 2021-11-02
  • 2021-09-11
  • 2022-12-23
  • 2021-08-03
猜你喜欢
  • 2021-09-29
  • 2021-05-05
  • 2021-08-20
  • 2022-12-23
  • 2021-07-29
相关资源
相似解决方案