在 CentOS 系统中,QEMU 进程启动后不久被自动终止(killed),可能由多种原因导致。以下是常见原因及排查方法:
1. 内存不足(OOM Killer)
- 现象:系统内存不足时,内核的 OOM Killer 会强制终止占用内存最多的进程(如 QEMU)。
- 检查方法:
dmesg | grep -i "oom" # 查看内核日志是否有OOM记录 free -h # 检查剩余内存
- 解决方案:
- 增加虚拟机内存限制:调整 QEMU 的
-m
参数(例如-m 4G
)。 - 优化宿主机内存:关闭不必要的进程,或增加物理内存。
- 禁用 OOM Killer(不推荐):
echo -17 > /proc/$(pgrep qemu)/oom_adj # 临时禁止OOM杀死QEMU
- 增加虚拟机内存限制:调整 QEMU 的
2. QEMU配置错误
- 常见问题:
- CPU/内存参数不合理(如
-smp cores=32
但宿主机只有16核)。 - 使用了不支持的加速模式(如未启用 KVM)。
- CPU/内存参数不合理(如
- 检查方法: 确保 QEMU 命令中包含正确的 KVM 加速选项:
qemu-system-x86_64 -enable-kvm -m 4G ... # KVM加速必须开启
如果未启用 KVM,QEMU会退回到纯软件模拟,性能极低且易被系统终止。
3. SELinux/权限限制
- 现象:SELinux可能阻止 QEMU访问资源。
- 检查方法:
ausearch -m avc -ts recent #查看SELinux拒绝记录
- 解决方案:
setenforce Permissive #临时关闭SELinux测试是否解决问题
chcon -t svirt_image_t /path/to/vm-disk.img #修正磁盘文件SELinux标签
4. Cgroup资源限制
如果 QEMU运行在容器或受Cgroup限制的环境中,可能触发了CPU/内存限制。
cat /sys/fs/cgroup/memory/memory.limit_in_bytes #检查Cgroup内存限制
systemctl status qemu.slice #若使用systemd托管QEMU进程)
5. QEMU自身崩溃
可能是由于版本Bug或不兼容的硬件虚拟化支持。
dmesg | grep qemu #查看内核日志中的崩溃信息
journalctl -xe #查看系统日志
qemu-system-x86_64 --version #确认QEMU版本
yum update qemu* #升级到最新稳定版
6. KVM模块问题
确保KVM内核模块已加载且硬件虚拟化支持正常:
| grep kvm #检查kvm模块是否加载
egrep '(vmx|svm)' /proc/cpuinfo #确认CPU支持虚拟化
modprobe kvm_intel #手动加载模块(Intel CPU)
快速定位步骤总结
dmesg | tail -50
→查看内核日志末尾的报错。journalctl -u libvirtd
→如果是通过libvirt管理虚拟机,检查服务日志。strace qemu-system-x86_64 ...
→跟踪QEMU的系统调用。
根据具体错误信息进一步分析即可解决问题。
内容由零声教学AI助手提供,问题来源于学员提问