Systemd

Azure Linux 中 systemd 的 ps 輸出出現巨大延遲

  • September 21, 2021

我的 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

我的懷疑是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) 將用於帳戶資訊。如果它破壞了某些東西,可以改回來。

引用自:https://unix.stackexchange.com/questions/669899