我的一台服务器出现间歇性问题,需要大约 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