Oracle Linux 7u2下高磁盘IO时sssd_nss进程CPU占用过高求助
我之前在Oracle Enterprise Linux 7u2环境里碰到过几乎一模一样的问题——装了Meltdown/Spectre补丁后,大Maven构建跑起来时,/usr/libexec/sssd/sssd_nss进程和Java进程各占一半CPU,闲时却完全正常。结合排查经验,给你几个可行的解决方向:
1. 调整SSSD的缓存策略,减少频繁的用户/组解析
SSSD的NSS模块默认缓存时长可能偏短,高IO场景下Maven生成大量文件时,系统会频繁触发用户和组的身份查询,补丁后的系统调用开销放大了这个问题。你可以这么改:
- 编辑
/etc/sssd/sssd.conf,找到[nss]段,添加或修改以下参数:cache_credentials = true entry_cache_timeout = 3600 # 缓存有效期设为1小时,可根据实际情况调整 entry_cache_nowait_timeout = 300 # 缓存过期后等待新数据的超时时间 - 重启SSSD服务生效:
systemctl restart sssd
2. 验证是否是频繁的身份查询导致的
你可以用strace跟踪Maven的Java进程,确认是否有大量的身份解析调用:
strace -p <你的Java进程PID> -e getpwnam,getgrnam
如果输出里刷出一堆getpwnam/getgrnam,那基本实锤是身份查询触发的SSSD高负载,调整缓存就能解决。
3. 优化nsswitch配置,优先用本地缓存
确保系统优先读取本地用户/组文件,再走SSSD查询:
编辑/etc/nsswitch.conf,把passwd和group的配置改成:
passwd: files sss group: files sss
这样本地存在的用户/组不会触发SSSD查询,能减少不少负载。
4. 检查SSSD日志找异常
看看/var/log/sssd/sssd_nss.log里有没有频繁的缓存失效、LDAP/AD连接超时之类的报错——如果是远程身份源连接不稳定,也会导致SSSD反复查询,针对性修复连接问题就行。
5. 升级SSSD版本
OEL7u2自带的SSSD版本可能比较旧,和Meltdown/Spectre补丁存在兼容性问题。试试更新SSSD包:
yum update sssd
更新后重启服务,很多时候这类兼容性问题就能解决。
我当时调整完SSSD缓存参数后,sssd_nss的CPU占用直接降到了个位数,Maven构建速度也恢复到了补丁前的水平,你可以按顺序试试这些方法。
内容的提问来源于stack exchange,提问作者GregEschbacher

