rsyslogd内存占用过高解决方案
侧边栏壁纸
  • 累计撰写 83 篇文章
  • 累计收到 134 条评论

rsyslogd内存占用过高解决方案

萧瑟
2021-10-13 / 2 评论 / 73 阅读 / 正在检测是否收录...

今天产品经理告诉我项目打不开了,让我解决一下问题。经过短暂的排除,发现 docker 运行四个月,容器日志把 50G 磁盘占用完了,导致项目网站部分服务不可用。重启 docker ,重新部署后,偶然发现服务器的内存使用率也达到 85% ,我记得之前 docker 优化后才占用 30% ,所以这个问题也需要排除一下。

查看服务器状态

使用top命令查看服务器各个程序占用CPU、内存情况。

查看消耗内存最多的前40个进程

ps auxw|head -1;ps auxw|sort -rn -k4|head -40

通过结果看到rsyslogd日志管理服务占用了10%左右的内存。

修改rsyslogd服务配置文件

vim /usr/lib/systemd/system/rsyslog.service

Service配置中添加 MemoryAccounting=yesMemoryMax=80MMemoryHigh=8M 三项如下所示。

[Unit]
Description=System Logging Service
;Requires=syslog.socket
Wants=network.target network-online.target
After=network.target network-online.target
Documentation=man:rsyslogd(8)
Documentation=http://www.rsyslog.com/doc/
 
[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/rsyslog
ExecStart=/usr/sbin/rsyslogd -n $SYSLOGD_OPTIONS
Restart=on-failure
UMask=0066
StandardOutput=null
Restart=on-failure
MemoryAccounting=yes
MemoryMax=80M
MemoryHigh=8M
 
[Install]
WantedBy=multi-user.target
;Alias=syslog.service

通常情况下rsyslogd大小只有5M,所以将内存上限设置为8M,然后将绝对内存限制为80M。
重启服务后

systemctl daemon-reload
systemctl restart rsyslog

至此问题算是解决,还是需要后期继续跟进排查。

0

评论 (2)

取消
  1. 头像
    林羽凡
    Windows 10 · Google Chrome

    日志不是定时自动删的么, 什么日志能占这么多空间。

    回复
    1. 头像
      萧瑟 作者
      MacOS · Google Chrome
      @ 林羽凡

      服务太多了,docker都直接把硬盘跑满了,日志也占了大量的进程。

      回复