
1. 问题现象与背景分析最近在维护CentOS服务器时发现系统CPU使用率异常飙升通过top命令排查发现是rngd进程占用了大量CPU资源。这种情况在虚拟化环境中尤为常见特别是在KVM虚拟机中安装的CentOS系统上。rngd是Linux系统中的随机数生成守护进程Random Number Generator Daemon它的主要职责是从硬件随机数生成器如/dev/hwrng收集熵数据并将其注入到内核的熵池中。这对于需要高质量随机数的应用如加密操作非常重要。2. 问题根源探究2.1 为什么rngd会导致CPU飚高在虚拟化环境中通常缺乏真正的硬件随机数生成器。当rngd无法从/dev/hwrng获取足够的熵时它会进入一个高CPU占用的循环状态不断尝试获取随机数源。这会导致以下问题持续的高CPU占用通常是一个核心的100%系统响应变慢可能影响依赖随机数的服务如SSH、SSL等2.2 诊断方法确认是否是rngd导致的问题top -c查看进程列表如果发现rngd进程占用过高CPU通常就是这个问题。检查系统熵值cat /proc/sys/kernel/random/entropy_avail正常值应该在3000左右如果低于1000说明系统熵值不足。3. 解决方案3.1 方案一禁用rngd服务适合不需要高质量随机数的环境停止当前运行的rngd服务systemctl stop rngd禁止rngd开机启动systemctl disable rngd验证服务状态systemctl status rngd注意这种方法虽然简单但会降低系统随机数质量可能影响加密操作的安全性。3.2 方案二使用haveged作为替代熵源推荐haveged是一个用户空间的熵守护进程它通过收集处理器时序变化来生成熵。安装havegedyum install -y haveged启动并启用havegedsystemctl enable --now haveged停止并禁用原来的rngdsystemctl disable --now rngd验证熵值watch -n 1 cat /proc/sys/kernel/random/entropy_avail现在应该能看到熵值维持在较高水平。3.3 方案三配置rngd使用更合适的熵源如果必须使用rngd可以调整其配置编辑配置文件vi /etc/sysconfig/rngd修改或添加以下内容EXTRAOPTIONS--rng-device /dev/urandom重启rngd服务systemctl restart rngd4. 深入分析与优化建议4.1 为什么虚拟化环境中熵值容易不足在虚拟化环境中由于缺乏真实的硬件随机源如键盘、鼠标、磁盘等物理设备的时序变化熵池补充缓慢。而现代加密应用如SSL/TLS对随机数需求量大导致熵池快速耗尽。4.2 各种解决方案的优缺点对比方案优点缺点适用场景禁用rngd简单直接立即降低CPU使用降低系统安全性测试环境或不重要的系统使用haveged提供稳定的熵源不影响安全性需要额外安装软件生产环境推荐方案配置rngd保持原有架构可能仍需调整参数需要保持rngd的特殊环境4.3 长期监控建议设置监控告警当熵值低于阈值时发出通知# 添加到crontab中 */5 * * * * [ $(cat /proc/sys/kernel/random/entropy_avail) -lt 1000 ] echo Low entropy warning | mail -s Entropy Alert adminexample.com5. 常见问题排查5.1 安装haveged后熵值仍然低可能原因haveged服务未正常运行系统中有其他进程消耗熵过快解决方法systemctl restart haveged # 检查是否有大量消耗熵的进程 ls -l /proc/*/fd | grep random5.2 禁用rngd后某些服务无法启动某些安全敏感的服务如sshd需要足够的熵才能启动。如果遇到这种情况建议采用方案二安装haveged而不是完全禁用熵源。5.3 系统升级后问题重现CentOS系统升级可能会重置服务配置。如果问题重现需要重新应用上述解决方案。6. 高级配置技巧对于高安全性要求的系统可以考虑以下组合方案安装haveged提供基础熵源保留rngd但配置其使用haveged生成的熵定期检查熵值并记录日志配置示例# 安装必要软件 yum install -y haveged rng-tools # 配置rngd使用urandom echo EXTRAOPTIONS--rng-device /dev/urandom /etc/sysconfig/rngd # 启动服务 systemctl enable --now haveged systemctl enable --now rngd # 设置监控 echo * * * * * root echo $(date) Entropy: $(cat /proc/sys/kernel/random/entropy_avail) /var/log/entropy.log /etc/cron.d/entropy-monitor7. 性能影响评估在解决这个问题后应该对系统性能进行验证CPU使用率是否恢复正常加密操作如SSL握手是否仍然流畅系统整体响应时间是否改善可以使用以下命令进行简单测试# 测试OpenSSL性能执行10次SHA256哈希 time for i in {1..10}; do openssl speed sha256; done # 测试随机数生成速度 dd if/dev/random of/dev/null bs1 count10248. 虚拟化环境特殊考量在KVM等虚拟化环境中还可以考虑启用virtio-rng设备调整虚拟机的熵源设置在宿主机层面提供熵源KVM配置示例在虚拟机XML配置中添加devices rng modelvirtio backend modelrandom/dev/random/backend /rng /devices9. 安全注意事项不要完全禁用系统的随机数生成功能在生产环境中避免使用质量低的随机源定期检查系统的熵值水平监控与随机数相关的安全事件10. 总结与个人实践建议经过多次实践我发现对于大多数CentOS虚拟化环境安装haveged是最平衡的解决方案。它不仅解决了CPU飚高的问题还能维持足够的熵值供应。在实施时建议按照以下步骤先安装haveged并启用观察系统熵值和CPU使用率如果效果良好再考虑禁用或调整rngd设置长期监控对于特别关键的系统可以考虑同时运行haveged和配置合理的rngd以提供双重保障。