1.1 现象
在openstack计算节点上,如Figure-1所示,使用top工具发现某些个虚拟机的进程占用cpu核一直在100%,系统的负载load average:5.32,表明有5个task处于(可运行+不可中断阻塞状态);使用sar -q 2,如果Figure-2所示,runq-sz(Run queue length (number of tasks waiting for run time))的值为3、4、5,与top命令的结果也一一致。
Figure-1
Figure -2
1.2 分析步骤
通过下面的步骤,分析是什么原因造成了这种问题
1.2.1 查看进程、线程状况
选择了其中一个qemu-kvm进程进行分析,进程号为13623,查看该进程的线程状况:
top -H -p 13623
Figure-3
如图Figure-3所示,13791线程100%占用了一个CPU核,别的线程工作正常。
1.2.2 gdb查看该线程的栈的状况
通过下面的步骤查看线程栈的状况:
gdb attach 13623
info thread (看到13791的线程在gdb里显示的id为188)
thread 188 (切换到这个线程)
backtrace (Print backtrace of all stack frames)
Figure-4
如图Figure-4所示,这个线程是个vcpu线程,通过ioctl(kvm_vcpu_ioctl)进入虚拟机运行状态,处于VM_Entry,说明guestos一直在忙。
1.2.3 查看下物理cpu的负载状况
通过sar命令同样可以查看cpu的负载状况:
sar -P ALL 2
sar -u 2
Figure-5
Figure-6
对比Figure-1、Figure-5、Figure-6,CPU核的占用率,整体的负载状况,与top
命令的结果基本一致。
1.2.4 查看guestos状况
在guestos里,通过top命令查看哪个进程在使用CPU:
ps -aux | grep -i 13623 (该进程号对应的虚拟机名称为:instance-000006f2;
或者在top过程中,按c键,会显示进程的命令行信息,该进程的虚拟机名称也可以
看到。
virsh vncdisplay instance-000006f2 (该虚拟机的vnc端口为:8),vnc客户端
连接访问该虚拟机
用top -d 1查看进程状况,如Figure-7所示,一个名为wnTKYg的进程100%在使用
cpu。用pkill wmTKYg杀死该进程,cpu占有率马上就下降了。
Figure-7
1.3 解决问题
网络搜索后,了解到这个wnTKYg的程序,原来是个挖矿的木马病毒,利用系统的漏洞
侵入系统。