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命令的结果也一一致。

 

openstack的虚机实例已经关机 openstack查看虚机占用cpu_命令行

                          Figure-1

 

openstack的虚机实例已经关机 openstack查看虚机占用cpu_命令行_02

                          Figure -2

1.2 分析步骤

通过下面的步骤,分析是什么原因造成了这种问题

1.2.1 查看进程、线程状况

选择了其中一个qemu-kvm进程进行分析,进程号为13623,查看该进程的线程状况:

top -H -p 13623

 

openstack的虚机实例已经关机 openstack查看虚机占用cpu_阻塞状态_03

                      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)

 

openstack的虚机实例已经关机 openstack查看虚机占用cpu_阻塞状态_04

                       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

 

openstack的虚机实例已经关机 openstack查看虚机占用cpu_openstack的虚机实例已经关机_05

            Figure-5

 

openstack的虚机实例已经关机 openstack查看虚机占用cpu_阻塞状态_06

                       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占有率马上就下降了。

 

openstack的虚机实例已经关机 openstack查看虚机占用cpu_openstack的虚机实例已经关机_07

                          Figure-7

1.3 解决问题

网络搜索后,了解到这个wnTKYg的程序,原来是个挖矿的木马病毒,利用系统的漏洞

侵入系统。