3

我在 Oracle Enterprise Linux 7u2 上执行频繁、繁重的 maven 构建,这些构建会生成大量 jars/wars/ears。我最近注意到的(在一些崩溃/幽灵补丁之后)是这个过程非常高的 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 磁盘上)

4

1 回答 1

3

sssd_nss是从下游服务(如 LDAP)抽象用户/组信息请求的守护进程。它实际上并不进行查找,而是向执行它的服务发出请求,首先检查本地磁盘缓存。

这让我觉得繁重的 I/O 部分正在围绕用户和组进行大量操作(例如,查找 UID 的用户名,查找 UID 的组)。

您还应该查看高sssd_nssCPU 是否为 IOWAIT。这表明您确实在执行大量用户/组查询,并且以某种方式被磁盘 I/O 阻止。您可以使用top查看整个系统 IOWAIT(查找wa),并iotop获取每个进程的指标。

如果主要是 IOWAIT,您可能需要单独添加 I/O 容量或将构建卷与系统卷分开。我怀疑这是您问题的根本原因。

你提到这发生在熔毁/幽灵补丁之后。这可能表明构建过程正在启动许多系统调用,sssd_nss这些补丁现在速度较慢。您可能想查看您的构建过程,看看是否有不必要的用户/组相关命令。您可以查看正在调用的系统调用,strace -p $pid_of_sssd_nss或者使用 sysdig 进行更高级的分析。如果该服务正在执行大量系统调用,请查看它正在执行的调用并找出您的构建过程在哪里启动这些调用。然后尽量减少它们。

于 2018-04-07T06:48:35.213 回答