解决 LXC 客户机中登陆缓慢的问题
Contents
如果在 LXC 容器中运行 Ubuntu/Debian,有时候会碰到登陆缓慢卡住的情况,尤其是跨架构的容器,需要很久才登陆成功:
- 使用
lxc-attach xxxx
后,使用su user
切换用户时,卡住; - 直接使用
ssh user@10.0.3.xxx
,输入完用户名密码后,卡住;
卡住之后,系统负载上升,检查会发现容器的 systemd
进程 CPU 占用很高,需要很久才正常,然后登陆成功。同样,关闭 LXC 容器时,命令也会等待很久。
解决办法可以参考 Fix Debian 11 bullseye slow SSH login and sudo on LXC Proxmox:
- 在容器中运行
systemctl mask systemd-logind
; - 在容器中运行
pam-auth-update
然后取消选择Register user sessions in the systemd control group hierarchy
,即可。或者直接运行pam-auth-update --remove systemd
.
具体原因倒不是特别清晰,这种现象特别影响效率。
LXC 容器无法 DHCP 获取到 IP
如果 LXC 容器已经使用 DHCP 获取 IP, 但是启动后无法正常获取 IP,则可以通过这种方法解决:
- 临时方案:在宿主系统运行
ethtool -K vethXXXX tx off
和ethtool -K lxcbrXXX tx off
,命令需要 root 权限,该命令会关闭 LXC 虚拟网卡的校验功能。 - 永久方案:使用 udev 规则来自动处理校验关闭,创建文件
/etc/udev/rules.d/90-lxc-net.rules
:
|
|
这种现象原因是,虚拟网卡一般不需要在 IP 包中附加校验,但是 DHCP 工具目前会主动校验数据包,造成检验失败,DHCP 握手失败。