我在Oracle Enterprise Linux 7u2上执行频繁、繁重的maven构建,这会生成大量jars/wars/ears。我最近注意到(在一些meltdown / spectre补丁之后)这个过程占用了非常多的CPU:
/usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --debug-to-files
当我的服务器空闲时?没问题。但是在我的maven构建的大量磁盘IO部分,maven java进程和sssd_nss争抢CPU,各占50%。(作为参考,我有一个4核Xeon服务器)
我真的不知道这个过程是什么(除了它可能处理LDAP?)或者为什么它会关心java文件复制和压缩。(这些都在本地/非NFS磁盘上)
发布于 2018-04-07 14:48:35
sssd_nss是从诸如LDAP之类的下游服务提取用户/组信息请求的守护进程。它实际上并不执行查找,而是向执行此操作的服务发出请求,首先检查本地磁盘缓存。
这让我认为繁重的I/O部分正在围绕用户和组执行大量操作(例如,在用户名中查找UID,在组中查找UID)。
您还应该检查高sssd_nss CPU是否为IOWAIT。这将表明您确实在执行大量用户/组查询,但不知何故,这些查询被磁盘I/O阻塞了。您可以使用top查看整个系统的IOWAIT (查找wa),使用iotop获取每个进程的指标。
如果主要是IOWAIT,您可能需要单独添加I/O容量,或者将构建卷与系统卷分开。我怀疑这是你的问题的根本原因。
你提到这是在meltdown/幽灵补丁之后发生的。这可能表明构建过程在sssd_nss中启动了大量系统调用,这些系统调用现在使用这些补丁时速度会变慢。您可能希望查看构建过程,查看是否存在不必要的与用户/组相关的命令。您可以使用strace -p $pid_of_sssd_nss或use sysdig for even fancier analysis查看正在调用的系统调用。如果该服务正在执行大量的系统调用,请查看它正在进行的调用,并找出您的构建进程在何处发起这些调用。然后试着最小化它们。
https://stackoverflow.com/questions/49618032
复制相似问题