我在 ps 输出中遇到了巨大的延迟 - 当它输出第一行 ( systemd-networkd
) 时,有一个巨大的延迟20到25秒,然后立即显示其余部分。
$ 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) 来存储帐户信息。如果损坏了某些东西可以改回来。