1.1 现象
在公有云平台,openstack计算节点上,如图Figure-1所示,一台windows虚拟机的qemu-kvm进程116%的占用cpu资源,如果Figure-2所示,该虚拟机仅有一个vcpu,因此该虚拟机已经满负荷的运行。
Figure-1
Figure-2
1.2 分析步骤
通过下面步骤的分析,了解qemu-kvm进程在忙什么,为什么这么忙?
1.2.1 查看进程、线程的状态
通过top -d 3 -Hp 5180查看进程,以及该进程的相关线程的状态,分析出哪个线程在忙。如图Figure-3所示,线程5180的CPU%为26.7%,该线程是Qemu的主线程,线程5207的CPU%为90.1%,说明:
1)Qemu有线程互相间调度,不存在某个线程挂掉或者阻塞在什么资源上,把别的线程一直阻塞住的情况
2)5207线程一直90%左右的CPU占有率,是什么外部I/O事件,或者什么软件一直很忙?
下面观察下线程5207的stack情况,stack里有函数调用的过程,使用gdb过程如图Figure-4所示:
1)gdb attach 5180
2)info thread (线程5207的id是101)
3)t 101
4)backtrace
5)detach
6)quit
从backtrace的结果可以看出,这个线程是个vcpu线程,通过kvm_vcpu_ioctl进入vm_entry。另外通过另外一种方式pstack 5207,同样可以查看线程的stack(Figure-5)。
Figure-3
Figure-4
&n