systemctl --user 需要数十秒才能运行

systemctl --user 需要数十秒才能运行

我的一台服务器出现间歇性问题,需要大约 15 秒才能登录。这是通过 ssh 作为我自己的用户而不是 root 进行的。

另外,一旦我登录,有时“sudo su”需要大约几十秒。

最后,我刚刚注意到我可以通过以我的用户(而不是 root)身份运行“systemctl --user”来按需重现该问题。

当这种情况发生时,我可以看到 systemd 进程的 CPU 使用率飙升至 100%。

# in htop
    PID USER       PRI  NI  VIRT   RES   SHR S  CPU%▽MEM%   TIME+  Command
 206136 todd        20   0 53680 46120  8656 R  99.0  1.2  6h10:06 /usr/lib/systemd/systemd --user

我可以在 中观看整个过程strace,但对我来说没有什么真正突出的,或者似乎与挂断/恢复相关。我确实看到了很多这样的内容,所以也许它正在重新分配/重新排列一些数据结构?

brk(0x5607dc128000)                     = 0x5607dc128000
brk(0x5607dc149000)                     = 0x5607dc149000

另外,有时它不会完成,并且超时

0 %  [via 192.168.99.8] systemctl --user
Failed to list units: Connection timed out

我可以做些什么来调试/识别问题?

1 %  [via 192.168.99.8] uname -a
Linux bifrost 5.19.10-arch1-1 #1 SMP PREEMPT_DYNAMIC Tue, 20 Sep 2022 15:17:59 +0000 x86_64 GNU/Linux

0 %  [via 192.168.99.8] pacman -Q systemd
systemd 251.4-1

另一个细节——几个月来我一直断断续续地看到这个问题——我知道如果我重新启动机器,这个问题几天之内就不会再出现。

编辑:通过strace -r显示相对时间戳,看来我找到了罪魁祸首。

     0.000128 getrandom("\xeb\x49\xb5\x3d\x37\x5a\xc4\xd6\x59\x2e\x5c\x5c\x8a\x5a\x35\xfd", 16, GRND_INSECURE) = 16
     0.000141 getrandom("\x04\xa7\xa1\xa9\xe4\xbb\x5c\x2c\xa3\x42\x0c\xf8\x36\xd7\x43\x7d", 16, GRND_INSECURE) = 16
    16.183344 newfstatat(AT_FDCWD, "/dev/disk/by-diskseq/19565", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x8, 0x10), ...}, 0) = 0
     0.000389 newfstatat(AT_FDCWD, "/dev/disk/by-id/usb-Generic-_SD_MMC_MS_PRO_20120926571200000-0:0", {st_mode=S_IFBLK|0660, st_rdev=makedev(0x8, 0x10), ...}, 0) = 0

但我不知道为什么fstatat("/dev/disk/by-diskseq/19565")会花很长时间。

该系统只有一张磁盘。根据smartctl -a /dev/sda,没有错误,

  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       47363
SMART Error Log Version: 0
No Errors Logged

这相当于大约 5.5 年的正常运行时间

编辑2:

有人询问 /dev/disk/by-diskseq 符号链接。我刚才假设它们会指向 /dev/sda,但事实并非如此。

0 % ls -alhi /dev/disk/by-diskseq/
159385 lrwxrwxrwx 1 root root   9 Oct  6 11:45 39685 -> ../../sdb

符号链接名称 (39685) 似乎每大约分钟增加 1。显然有一个sdb我不知道的事情。

0 % lsblk -ap
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
/dev/sda      8:0    0 111.8G  0 disk
├─/dev/sda1   8:1    0   487M  0 part /boot
└─/dev/sda2   8:2    0 111.3G  0 part /
/dev/sdb      8:16   1     0B  0 disk

0 % fdisk -l /dev/sdb
fdisk: cannot open /dev/sdb: No medium found

啊啊,好像是USB设备?但 USB 插槽中没有插入任何东西。

% udevadm info /dev/sdb
P: /devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.1/1-5.1:1.0/host2/target2:0:0/2:0:0:0/block/sdb
M: sdb
U: block
T: disk
D: b 8:16
N: sdb
L: 0
S: disk/by-diskseq/39699
S: disk/by-path/pci-0000:00:14.0-usb-0:5.1:1.0-scsi-0:0:0:0
S: disk/by-id/usb-Generic-_SD_MMC_MS_PRO_20120926571200000-0:0
Q: 39699
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5.1/1-5.1:1.0/host2/target2:0:0/2:0:0:0/block/sdb
E: DEVNAME=/dev/sdb
E: DEVTYPE=disk
E: DISKSEQ=39699
E: MAJOR=8
E: MINOR=16
E: SUBSYSTEM=block
E: USEC_INITIALIZED=4178478
E: ID_VENDOR=Generic-
E: ID_VENDOR_ENC=Generic-
E: ID_VENDOR_ID=0bda
E: ID_MODEL=SD_MMC_MS_PRO
E: ID_MODEL_ENC=SD\x2fMMC\x2fMS\x20PRO\x20\x20\x20
E: ID_MODEL_ID=0153
E: ID_REVISION=1.00
E: ID_SERIAL=Generic-_SD_MMC_MS_PRO_20120926571200000-0:0
E: ID_SERIAL_SHORT=20120926571200000
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=ums-realtek
E: ID_PATH=pci-0000:00:14.0-usb-0:5.1:1.0-scsi-0:0:0:0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_5_1_1_0-scsi-0_0_0_0
E: DEVLINKS=/dev/disk/by-diskseq/39699 /dev/disk/by-path/pci-0000:00:14.0-usb-0:5.1:1.0-scsi-0:0:0:0 /dev/disk/by-id/usb-Generic-_SD_MMC_MS_PRO_20120926571200000-0:0
E: TAGS=:systemd:
E: CURRENT_TAGS=:systemd:

编辑3

没有任何sdb文件打开或diskbyseq链接。

% lsof | grep sdb
# nothing
% lsof | grep diskseq
# nothing

系统已运行13天

% uptime
 09:55:33 up 13 days, 22:36,  1 user,  load average: 2.13, 2.08, 2.03

相关内容