环境:
CentOS Linux release 7.3.1611 (Core) Kernel:3.10.0-514.el7.x86_64
[root@localhost ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
2
[root@localhost ~]# cat /proc/cpuinfo| grep "cpu cores"| uniq
cpu cores : 2
[root@localhost ~]# 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
[root@localhost ~]# w
21:29:26 up 1 day, 2:17, 2 users, load average: 4.24, 4.24, 4.29
USER TTY FROM LOGIN@ 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负载排行
[root@localhost ~]# 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全占用了
[root@localhost ~]# 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 指定优先级
[root@www aa]# nice -n 5 vim
[root@www ~]# nice -n 1 vi&
[1] 2954
[root@www ~]# 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
[root@mail ~]# rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public
[root@mail ~]# curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo
[root@mail ~]# yum list dkms
[root@mail ~]# yum -y install dkms.noarch
[root@mail ~]# rpm -i http://mirror.us.leaseweb.net/epel/6/i386/epel-release-6-8.noarch.rpm
[root@mail ~]# yum -y install sysdig
[root@mail ~]# sysdig-probe-loader
详细的安装方法在前两个url都有很好的解释,好文章
[root@mail ~]# 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个异常前的操作情况的回滚,在同时查看有没有这几个进程的出现
来找出到底是什么原因造成这样的情况