0%

systemd-logind导致ssh登录缓慢

问题

通过SSH登录服务器CentOS7时异常缓慢,发现机上systemd-logind进程导致cpu占满100%的问题,使得并且消耗资源。

原因

systemd-logind主要功能是为每一个登陆session创建一个systemd角度的cgroup管理对象,更方便对session使用cgroup,也是一个systemd BUG
详情1:https://github.com/systemd/systemd/issues/1961
详情2:https://bugzilla.redhat.com/show_bug.cgi?id=1439989

解决方案

清除/清除所有范围文件和已加载的活动已放弃会话:

清理systemd中已放弃的会话:

删除会话文件

1
find /run/systemd/system -name "session-*.scope" -delete

删除会话目录

1
rm -rf /run/systemd/system/session*scope*

删除已放弃的会话
此命令可能会终止会话范围内的进程,因此请小心使用此命令

1
systemctl | grep "abandoned" | grep -e "-[[:digit:]]" | sed "s/\.scope.*/.scope/" | xargs systemctl stop

脚本形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vi /root/cleanup_systemd_sessions.sh

#!/bin/bash
## cleanup_systemd_sessions.sh

echo "Stopping abandoned sessions"
systemctl | grep abandoned | grep -e "[[:digit:]]" | sed "s/.scope.*/.scope/" | xargs --no-run-if-empty systemctl stop

cd /run/systemd/system/ || exit 1
for i in session-*.scope; do
! systemctl status "$i" >/dev/null 2>&1 || continue
echo "Removing /run/systemd/system/${i}*" >&2
rm -rf "${i}" "${i}.d"
done


chmod +x /root/cleanup_systemd_sessions.sh
0 * * * * /root/cleanup_systemd_sessions.sh