问题描述
OpenStack部署出来的Windows虚拟机,CPU内存很足(如16C48G),但是使用起来依然卡顿。
问题分析
登录虚拟机系统检查cpu信息发现,在设备管理器里能查看到16个cpu,但是实际使用时,只有2个cpu。所以系统实际只有2个cpu在工作,导致资源耗尽,影响正常使用。
解决方案概述
经调查确定,该问题是由libvirt引起。配置2核以上时,运行windows桌面版的虚拟机,只能识别2核。
方案1:通过修改该虚拟机的xml文件解决。
方案2:通过修改改虚拟机关联的flavor元数据解决。
具体实施步骤
实施方案1:
步骤1/4:定位实例
通过nova list和nova show查看实例名称,定位实例所在计算节点:
如上图,实例名称:instance-00000037;所在计算节点:control01
步骤2/4:修改实例
登录计算节点control01(如果是容器化部署,进入nova_libvirt容器下)。
在/etc/libvirt/qemu/路径下,用virsh edit instance-00000037修改实例xml文件。
需修改如下字段:
<topology sockets='2' cores='8' threads='1'/>
注:该字段表示2路cpu,每一路8个核,单线程。
步骤3/4:定义实例
使用virsh define保存修改:virsh define /etc/libvirt/qemu/instance-00000037.xml
步骤4/4:重启实例
- 使用virsh destroy instance-00000037关机
- 使用virsh destroy instance-00000037开机
实施方案2:
步骤1/2:flavor添加元数据
openstack flavor set {flavorName} \
--property hw:cpu_sockets=2 \
--property hw:cpu_cores=8 \
--property hw:cpu_threads=1
注:该字段表示2路cpu,每一路8个核,单线程。
步骤2/2:重建虚拟机
优化效果
查看CPU核数
实例启动完成后,再次登录系统,检查CPU核数:
如上图,系统中实际使用16个cpu。
绑定CPU
为了防止应用进程将16核都占满。先分配0~7这个8个核给该进程使用。这样即使这个8个核都占满,总体CPU使用率也只有50%,不会影响系统正常使用。
如上图,指定CPU 0~7运行xampp。