linux load average 異常
阿新 • • 發佈:2018-11-15
環境:
CentOS Linux release 7.3.1611 (Core) Kernel:3.10.0-514.el7.x86_64
[[email protected] ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
2
[[email protected] ~]# cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores : 2
[[email protected] ~]# cat /proc/cpuinfo| grep "processor"| wc -l
4
4核cpu
異常之前安裝:
<1> yum groupinstall "X Window System"
#openoffice軟體的依賴,目前均已remove
<2> Liberoffice
<3> / 分割槽進行過擴充套件
<4> 該伺服器作為nfs服務端被別的伺服器掛載過
w命令檢視load average
[ [email protected] ~]# w
21:29:26 up 1 day, 2:17, 2 users, load average: 4.24, 4.24, 4.29
USER TTY FROM [email protected] IDLE JCPU PCPU WHAT
root pts/0 10.10.10.138 五23 22:03m 0.03s 0.03s -bash
root pts/1 10.10.10.138 21:01 6.00s 0.20s 0.13s w
top命令檢視執行P檢視cpu負載排行
[ [email protected] ~]# top
top - 21:31:03 up 1 day, 2:18, 2 users, load average: 4.69, 4.43, 4.35
Tasks: 168 total, 2 running, 166 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.6 us, 0.9 sy, 97.3 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 16268356 total, 3124536 free, 8092496 used, 5051324 buff/cache
KiB Swap: 8257532 total, 8257532 free, 0 used. 6838028 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9 root 20 0 0 0 0 S 5.6 0.0 36:37.99 rcu_sched
32359 root 20 0 164036 2244 1548 R 5.6 0.0 0:00.06 top
1 root 20 0 130316 6820 4036 R 0.0 0.0 8:13.10 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.74 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:09.45 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
vmstat命令檢視,記憶體無異常,但是r佇列已經是4了,相當於4核cpu全佔用了
[ [email protected] ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 3125052 1040 5050364 0 0 17 77 36 106 99 1 0 0 0
解決思路:
先reboot,無效
正常情況下load average都是在1~2左右,在沒有程序(mysql,oracle,java等)時都是0.5左右
97.3 ni值特別高,正常情況下,這個值應該是1-10左右的,0.0 id 已經是0,說明一直再有程序呼叫cpu
NI是程序的優先值
###### nice 用來設定程式執行的優先順序 ######
一般來說,程式的執行就是cpu不停在上面切換而已,預設的情況下,cpu是很公平的,他在每個程序上切換的次數是一樣的,
但是如果你有一個程式很佔資源,如備份,這些程式,那麼你在執行的時候就會很卡,那麼這個時候你就會不想要他佔用那麼資源,
或者說是你想要讓別的程式先執行,那麼就需要修改nice這個值,他主要的作用就是修改cpu在該程式上切換的次數 。
<1> nice只能調整沒有執行的程序,
<2> 優先順序的數值為-20~~19,數值越小優先順序越高。-20優先順序最高,19的優先順序最低。
<3> 普通使用者只能再0~~19之間調整值,而且只能調整自己的程序,並且普通使用者只能調高NI值不能降低,例如原NI值為0,則普通使用者只能調整為大於0
<4> root使用者才能設定程序NI值為負值。而且可以調整任何使用者的程序
<5> PRI(new) = PRI(old) + NI 且PRI不能手動修改,它是通過PRI(old) + NI計算出來的
選項
-n 指定優先順序
[[email protected] aa]# nice -n 5 vim
[[email protected] ~]# nice -n 1 vi&
[1] 2954
[[email protected] ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1161 1157 0 80 0 - 27096 wait pts/0 00:00:00 bash
0 T 0 2954 1161 0 81 1 - 29245 signal pts/0 00:00:00 vi
4 R 0 2955 1161 0 80 0 - 27031 - pts/0 00:00:00 ps
NI列即表示程序的nice值。vi程序對應的NI值正好為剛設定的1。
PRI表示程序當前的總優先順序,值越小表示優先順序越高,由程序預設的PRI加上NI得到,即PRI(new) = PRI(old) + NI。
由上程式,程序預設的PRI是80,所以加上值為1的NI後,vi程序的PRI為81。
renice 用於改變正在執行的程序的nice值
###### nice 用來設定程式執行的優先順序 ######
現在可以肯定是某個NI值高的程序把cpu全部佔用了(也就是ni值時-20的)
再來看當前程序ni值比較高的程序
32655 root 0 -20 0 0 0 S 0.0 0.0 0:00.01 kworker/2:1H
32577 root 20 0 0 0 0 S 0.0 0.0 0:00.42 kworker/0:2
32451 root 20 0 0 0 0 S 0.0 0.0 0:00.18 kworker/u8:0
31143 postfix 20 0 90504 4128 3036 S 0.0 0.0 0:00.03 pickup
30848 root 20 0 117636 2240 1724 S 0.0 0.0 0:00.41 bash
30842 root 20 0 149728 5296 4000 S 0.3 0.0 0:01.25 sshd
30831 root 20 0 0 0 0 S 0.0 0.0 0:00.36 kworker/2:2
29979 root 20 0 0 0 0 S 0.0 0.0 0:01.10 kworker/u8:2
27498 root 0 -20 0 0 0 S 0.0 0.0 0:03.02 kworker/1:2H
25561 root 0 -20 0 0 0 S 0.0 0.0 0:01.04 kworker/1:1H
發現都是kworker,不知道是做什麼的,找一臺狀態正常配置相似的虛擬機器看下,都有這幾個程序,暫時排除
開始網上查資料
參考網址
https://yq.aliyun.com/ziliao/65685
https://www.cnblogs.com/maoxianfei/p/9077089.html
http://lax.v2ex.com/t/456574(重點)
開始安裝sysding
[[email protected] ~]# rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public
[[email protected] ~]# curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo
[[email protected] ~]# yum list dkms
[[email protected] ~]# yum -y install dkms.noarch
[[email protected] ~]# rpm -i http://mirror.us.leaseweb.net/epel/6/i386/epel-release-6-8.noarch.rpm
[[email protected] ~]# yum -y install sysdig
[[email protected] ~]# sysdig-probe-loader
詳細的安裝方法在前兩個url都有很好的解釋,好文章
[[email protected] ~]# sysdig -c topprocs_cpu
CPU% Process PID
--------------------------------------------------------------------------------
98.49% <NA> 866
98.49% <NA> 868
98.49% <NA> 861
95.53% <NA> 869
2.95% sysdig 1847
0.98% java 14885
0.00% oracle 3057
0.00% systemd-udevd 566
0.00% systemd-logind 733
0.00% irqbalance 734
和第三篇url是一樣的情況,開殺(隨便殺一個,其他三個就會消失)
CPU% Process PID
--------------------------------------------------------------------------------
2.00% oracle 4535
1.00% sysdig 1915
0.00% chronyd 742
0.00% rtl_cache_wsupd 15770
0.00% oracle 3057
0.00% systemd-udevd 566
0.00% oracle 3182
0.00% soffice.bin 15722
0.00% soffice.bin 15770
0.00% rtl_cache_wsupd 15674
暫時正常
抽時間在虛擬機器上測試分別進行4個異常前的操作情況的回滾,在同時檢視有沒有這幾個程序的出現
來找出到底是什麼原因造成這樣的情況