Azure Linux 中 systemd 的 ps 输出存在巨大延迟

Azure Linux 中 systemd 的 ps 输出存在巨大延迟

我在 ps 输出中遇到了巨大的延迟 - 当它输出第一行 ( systemd-networkd) 时,有一个巨大的延迟2025秒,然后立即显示其余部分。

$ ps -eaf
. . .
systemd+ 31865     1  0 Jul22 ?        00:00:10 /lib/systemd/systemd-networkd
62583    31891     1  0 Jul22 ?        00:00:12 /lib/systemd/systemd-timesyncd
root     31922     1  0 Jul22 ?        00:02:09 /lib/systemd/systemd-journald
. . .

知道为什么(以及解决方法)吗?

$ time ps -o uname -p 31891
USER
62583

real    0m25.025s
user    0m0.006s
sys     0m0.006s

$ time getent passwd 62583 | wc
      0       0       0

real    0m25.030s
user    0m0.005s
sys     0m0.001s

$ grep 62583 /etc/passwd | wc 
      0       0       0

$ grep passwd /etc/nsswitch.conf
passwd:         compat systemd

$ grep compat /etc/nsswitch.conf
passwd:         compat systemd
group:          compat systemd
shadow:         compat

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic

$ uname -rm
5.4.0-1047-azure x86_64

答案1

我怀疑是ps试图将数字 UID 转换为用户名,查找该 UID,然后超时。查找失败后,将显示数字 ID。

看看这两个命令是否显示差异:

ps -o uid -p 31891

ps -o uname -p 31891

现在为什么要进行查找并超时?您可以为用户名配置 NIS 吗?你有什么用grep passwd /etc/nsswitch.conf?您可以通过 检查您的查找getent passwd 62583,但我想它会是空白的。

修理:

如果您不认为您正在使用 NIS/NIS+ 作为信息系统(这将是非常对于单个系统来说不常见),那么您可以通过将 nsswitch.conf 中的行更改为来关闭此功能

passwd: files

告诉解析器仅使用本地文件 (/etc/passwd) 来存储帐户信息。如果损坏了某些东西可以改回来。

相关内容