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)
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,然后从那里进行故障排除。