Load高问题排查
一、cpu层面进行排查
1. 首先排查哪些进程cpu占用率高。 通过top -c命令显示进程运行信息列表 (按键P按CPU占有资源排序)
执行:
jstack 88148 > loop.txt
2. 查看对应java进程的每个线程的CPU占用率。通过命令:top -Hp 88148
查看到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
二、查看运行中的队列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进程
2) :ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' 、、查找进程状态为Z的进程
三、OS 系统层面 检查系统IO
执行iostat
avg-cpu段: %user: 在用户级别运行所使用的CPU的百分比. %nice: nice操作所使用的CPU的百分比. %sys: 在系统级别(kernel)运行所使用CPU的百分比. %iowait: CPU等待硬件I/O时,所占用CPU百分比. %idle: CPU空闲时间的百分比.