临时解决方法(限制服务内存)
1、修改rsyslogd服务配置文件
vim /usr/lib/systemd/system/rsyslog.service
在Service配置中添加MemoryAccounting=yes,MemoryMax=80M,MemoryHigh=8M三项如下所示。
[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
通常情况下rsyslogd大小只有5M,所以将内存上限设置为8M,然后将绝对内存限制为80M。
2、重启服务
systemctl daemon-reload
systemctl restart rsyslog
结论:但过一段时间,rsyslog进程还是会超过80M限制。
根本原因
查看rsyslog输出的日志/var/log/
路径 | 描述 |
---|---|
/var/log/messages | 服务信息日志(记录linux操作系统常见的服务信息和错误信息) |
/var/log/secure | 系统的登陆日志(记录用户和工作组的变化情况,是系统安全日志,用户的认证登陆情况 |
/var/log/maillog | 邮件日志 |
/var/log/cron | 定时任务 |
/var/log/boot.log | 系统启动日志 |
发现/var/log/messages有几个G的日志。查看日志内容发现rsyslog把Journal的log都进行的输出和汇总。当容器越多是,log也就会也多,内存占用也就越多。同时也可能导致systemd-journald内存占用过高
1、修改Journal的配置/etc/systemd/journald.conf
把Storage改为persistent,如下:
[Journal]
Storage=persistent
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
RateLimitInterval=45s
#RateLimitBurst=1000
SystemMaxUse=200M
#SystemKeepFree=
#SystemMaxFileSize=
#RuntimeMaxUse=200M
#RuntimeKeepFree=
#RuntimeMaxFileSize=
MaxRetentionSec=5day
#MaxFileSec=7day
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
2、重启生效
systemctl restart systemd-journald
3、Storage选项扩展
Storage=的值可以是volatile,persistent, autoandnone,但是,默认的是auto,还是会往内存中存放。
- volatile代表日志只存在内存中,即/run/log/journal/
- persistent代表日志只存在磁盘中,即/var/log/journal/
- auto代表日志存在磁盘中,或者内存中,这个取决于你是否创建/var/log/journal/目录!!这个也算是一个坑吧,看来大家都需要手动mkdir -p /var/log/journal/,systemctl restart systemd-journald来解放自己的内存了!!!
- none,表示,日志不保留,全部drop,只有当你决定不使用systemd-journald的时候,你可以使用!