收起左侧

systemd-journal占用CPU的问题

2
回复
53
查看
[ 复制链接 ]

5

主题

6

回帖

0

牛值

江湖小虾

悬赏1飞牛币未解决

如题,任务管理器里就能看到,最新的1.1.9还是没修复。。。。硬盘都快被日志写满了。。。

收藏
送赞
分享

5

主题

60

回帖

0

牛值

fnOS系统内测组

systemd-journal占用CPU通常是因为日志文件过大或者某个服务一直在产生大量日志。

**问题原因:**
1. 日志文件过大,journal在循环读取
2. 某个服务日志级别设置为DEBUG,产生大量日志
3. 日志轮转配置不当

**解决步骤:**

**1. 检查日志大小**
```bash
# 查看journal日志总大小
journalctl --disk-usage
# 查看具体服务的日志
journalctl -u systemd-journald -n 100
```

**2. 清理旧日志(临时解决)**
```bash
# 清理7天前的日志
journalctl --vacuum-time=7d
# 或者清理到只保留500MB
journalctl --vacuum-size=500M
# 清理到只保留10000条记录
journalctl --vacuum-files=10000
```

**3. 配置日志轮转(永久解决)**
编辑配置文件:
```bash
nano /etc/systemd/journald.conf
```

修改或添加以下配置:
```ini
[Journal]
# 限制单个日志文件大小
SystemMaxUse=500M
# 限制系统总日志大小
RuntimeMaxUse=100M
# 限制日志保留时间
MaxRetentionSec=7day
# 限制日志文件数量
MaxFiles=5
```

保存后重启journal服务:
```bash
systemctl restart systemd-journald
```

**4. 检查哪个服务产生大量日志**
```bash
# 查看最近的错误日志
journalctl -p err -n 100
# 按服务查看日志大小
journalctl --disk-usage
# 查看产生CPU占用的进程
ps aux | grep journal
```

**5. 查找产生大量日志的服务**
```bash
# 查看最近10分钟的日志,找出产生大量日志的服务
journalctl --since "10 minutes ago" --no-pager | grep -E "[ERROR|WARN|DEBUG]" | cut -d' ' -f 5 | sort | uniq -c | sort -rn
```

**6. 临时禁用journal(不推荐)**
如果实在受不了,可以临时禁用日志记录(会丢失所有日志):
```bash
systemctl stop systemd-journald
# 修改配置文件,设置 Storage=none
echo "[Journal]\nStorage=none" > /etc/systemd/journald.conf
```

**7. 监控日志增长**
定期检查日志大小,设置定时任务清理:
```bash
# 编辑crontab
crontab -e
# 添加每天凌晨3点清理日志
0 3 * * * journalctl --vacuum-time=7d
```

**推荐做法:**
- 先执行步骤1和2清理旧日志
- 然后执行步骤3配置日志轮转
- 执行步骤5找出产生大量日志的服务,调整其日志级别
- 硬盘空间释放后再看CPU占用是否正常

如果配置后CPU占用还是很严重,建议把这个问题反馈给官方,可能是飞牛的某个服务bug导致的。

1

主题

6

回帖

0

牛值

江湖小虾

没升级1.1.18版本之前,一切正常。升级1.1.18 后,就一直在跑systemd-journal, cpu占用30%-40%,温度55°-65°。 晚上升级1.1.19 后,这个问题好像还是没解决。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则