高平均负载:哪些进程在队列中等待?

Ada*_*tan 8 uptime sar load-average

我有一个运行 Redis 的 Ubuntu 服务器,它遇到了高负载问题。

取证

正常运行时间

# uptime
05:43:53 up 19 min,  1 user,  load average: 2.96, 2.07, 1.52
Run Code Online (Sandbox Code Playgroud)

萨尔

# sar -q 
05:24:00 AM       LINUX RESTART

05:25:01 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
05:35:04 AM         0       116      3.41      2.27      1.20         4
Average:            0       116      3.41      2.27      1.20         4
Run Code Online (Sandbox Code Playgroud)

CPU 利用htop率低的尴尬: 在此处输入图片说明

最佳

在此处输入图片说明

网络统计

34 个开放redis-server连接:

$ sudo netstat -natp | grep redis-server | wc -l
34
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

自由

$ free -g
             total       used       free     shared    buffers     cached
Mem:            14          6          8          0          0          2
-/+ buffers/cache:          4         10
Swap:            0          0          0
Run Code Online (Sandbox Code Playgroud)

我如何知道哪些进程导致高负载,等待进入Running状态?连接数是否过高?

Cre*_*eek 15

由于 iowait 过高,您看到了意外的 loadavg。wa顶部部分的98.7显示了这一点。从您的屏幕截图中,我看到 kworker 进程也处于不间断睡眠状态(顶部处于 D 状态),这发生在进程等待磁盘 I/O 完成时。

vmstat让您了解运行队列。vmstat 1以典型的sar方式每秒执行一次更新。

在此处输入图片说明

r 列显示内核用来计算 loadavg 的可运行/正在运行的进程,b 列显示阻塞等待磁盘 I/O 又名不间断睡眠的进程。b中的进程被加入到loadavg计算中,这就是iowait导致神秘loadavg的原因。

因此,要回答您关于如何查看哪些 proc 导致高负载的问题,在您的 iowait 情况下,请使用top/ps查找处于 D 状态的proc,然后从那里进行故障排除。