Load average的值来源
在使用top
命令检查系统负载的时候,可以看到Load averages
字段,但是这个字段并不是表示CPU的繁忙程度,而是度量系统整体负载。
Load averages
采样是从/proc/loadavg
中获取的:
0.00 0.01 0.05 1/161 29703 每个值的含义依次为: lavg_1 (0.00) 1-分钟平均负载 lavg_5 (0.01) 5-分钟平均负载 lavg_15(0.05) 15-分钟平均负载 nr_running (1) 在采样时刻,运行队列的任务的数目,与/proc/stat的procs_running表示相同意思,这个数值是当前可运行的内核调度对象(进程,线程)。 nr_threads (161) 在采样时刻,系统中活跃的任务的个数(不包括运行已经结束的任务),即这个数值表示当前存在系统中的内核可调度对象的数量。 last_pid(29703) 系统最近创建的进程的PID,包括轻量级进程,即线程。 假设当前有两个CPU,则每个CPU的当前任务数为0.00/2=0.00 如果你看到load average数值是10,则表明平均有10个进程在运行或等待状态。有可能系统有很高的负载但是CPU使用率却很低,或者负载很低而CPU利用率很高,因为这两者没有直接关系。
找出系统中load高时处于运行队列的进程
脚本统计出来处于运行队列的进程
#!/bin/bash LANG=C PATH=/sbin:/usr/sbin:/bin:/usr/bin interval=1 length=86400 for i in $(seq 1 $(expr ${length} / ${interval}));do date LANG=C ps -eTo stat,pid,tid,ppid,comm --no-header | sed -e 's/^ \*//' | perl -nE 'chomp;say if (m!^\S*[RD]+\S*!)' date cat /proc/loadavg echo -e "\n" sleep ${interval} done
查CPU使用率比较高的线程脚本
#!/bin/bash LANG=C PATH=/sbin:/usr/sbin:/bin:/usr/bin interval=1 length=86400 for i in $(seq 1 $(expr ${length} / ${interval}));do date LANG=C ps -eT -o%cpu,pid,tid,ppid,comm | grep -v CPU | sort -n -r | head -20 date LANG=C cat /proc/loadavg { LANG=C ps -eT -o%cpu,pid,tid,ppid,comm | sed -e 's/^ *//' | tr -s ' ' | grep -v CPU | sort -n -r | cut -d ' ' -f 1 | xargs -I{} echo -n "{} + " && echo ' 0'; } | bc -l sleep ${interval} done fuser -k $0
标签:load,LANG,负载,interval,排查,linux,bin,proc,CPU From: https://www.cnblogs.com/ltlinux/p/17082928.html