一、概述

使用top命令查看内存占用时,发现rsyslogd内存占用很高。

二、排查

1、journalctl -u rsyslog查看状态

2、tail /var/log/messages查看messages日志

3、执行journalctl --verify命令检查发现系统日志卷文件损坏错误

三、解决办法

1、删除上面损坏的journal文件
2、删除 /var/lib/rsyslog/imjournal.state文件
3、修改rsyslogd服务配置文件后重启rsyslog

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

四、根本原因

systemd的一个bug,在journal需要压缩的时候就会发生这个问题,后果实在是很严重,还好已经修复了。有两种避免方法,我这边在两台经常发生这个问题的服务器上都实验了,跑了2天多都没有再发生,应该是确认可以解决的。

五、避免方法

1、关掉journal压缩配置

vi /etc/systemd/journald.conf,把#Compress=yes改成Compress=no,之后systemctl restart systemd-journald即可

2、升级systemd版本

我升级到systemd-219-42.el7_4.4.x86_64,之后systemctl restart systemd-journald,也应该可以解决

查看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进程内存占用过高,我们可以消减输出的日志,将log级别定义为err级别。

修改配置/etc/rsyslog.conf,增加如下三行

$imjournalRatelimitInterval 0
$imjournalRatelimitBurst 0
*.err;mail.none;authpriv.none;cron.none /var/log/messages

重启服务

systemctl daemon-reload
systemctl restart rsyslog

修改Journal的配置/etc/systemd/journald.conf
Storage改为persistent,如下

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See journald.conf(5) for details.[Journal]
Storage=persistent
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
SystemMaxUse=1G
#SystemKeepFree=
SystemMaxFileSize=10M
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
MaxRetentionSec=1month
#MaxFileSec=1month
ForwardToSyslog=no
#ForwardToKMsg=no
#ForwardToConsole=no
ForwardToWall=no
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K

重启服务

systemctl restart systemd-journald

Storage选项

通过查看man手册,#man 5 journald.conf 你会发现,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的时候,你可以使用。

参考链接

https://xbuba.com/questions/56986536
http://blog.zhouzg.com.cn/archives/712
http://aspirer.wang/?p=881
https://github.com/systemd/systemd/pull/1662
https://github.com/systemd/systemd/pull/1663
https://github.com/coreos/bugs/issues/322

解决rsyslogd服务占用内存高相关推荐

  1. win10服务器cpu占用过高,解决win10服务主机内存和cpu高占用的解决方法

    有些使用Win10系统的用户反馈说,电脑总是卡到不行,检查后发现原来是服务主机,本地服务占用了大量内存和cpu,导致电脑运行起来并不那么流畅.那么,遇到这种问题该怎么办呢?接下来,小编就向大家分享解决 ...

  2. JAVA服务实例内存高问题排查及解决

    生产服务内存高问题 问题描述# •1."计算中心" 服务堆内存分配4g,在生产环境运行一段时间后,实际占用内存4.8G,业务运行正常,未出现OOM.(本文以此服务进行排查) •2. ...

  3. Win11的两个实用技巧系列之加载驱动失败怎么办、占用内存高的解决办法

    Win11加载驱动失败怎么办?Win11无法加载驱动程序的三种解决方法 win11用户在使用电脑的时候遇到了"无法在设备上加载驱动程序"的情况,导致有些软件无法正常使用,这种情况要 ...

  4. 排查解决Java进程占用内存过高

    排查解决Java进程占用内存过高 1 在项目部署运行之前 1 检查JVM参数设置 2 检查代码逻辑 3 使用内存分析工具 4 检查线程 5 调整应用程序的设计 7 调整硬件资源 2 在项目部署运行之后 ...

  5. 服务器占用内存高,单任务管理器查看每个程序占用都不高

    服务器占用内存高,单任务管理器查看每个程序占用都不高.任务管理器进程内存占用不准确 最近测试一个东西,发现看8G的内存占用90%左右了,但是每个进程的内存占用情况都不高,最高就100M左右,内存都到哪 ...

  6. 软件测试cpu占用高,六个方法解决Win10 CPU占用过高卡顿 亲测有效

    大多数小伙伴的电脑系统都已经升级到最新版的Win10,我就想问一句"卡吗"?最近我发现,Win10有时会出现卡顿现象.一点击查看CPU占用情况,好家伙居然都已经出现红色警戒线了.那 ...

  7. win10msmpeng占内存_彻底解决win10 占用内存高的办法

    希望大家多多转发,帮助更多的人 必要前提:系统不能有任何已安装更新包 因为有个更新包bug (不知道哪个)导致内存(我是8G DDR2133)飙高 16G  32G也抗不住 网上方法都是废话没一个靠谱 ...

  8. oracle12cnolog,oracle12c 服务占用内存太大,oracle调整内存解决方法

    直接通过sqlplus命令行处理: 1.查看当前oracle内存占用情况: C:\Users\Administrator>sqlplus /nolog SQL*Plus: Release 12. ...

  9. win10系统wsappx占用内存高,电脑没法操作

    本人笔记本windows系统是这个版本. 那还是2年前的一次出差.我的笔记本因为下载了什么我忘了.就记得当时wsappx疯狂占用cpu电源使用量非常高.然后电脑卡的没法操作.点桌面上的任何图标都没有反 ...

最新文章

  1. 什么是DevOps的基石?为什么顶级公司都离不开它?
  2. android Camera照相机技术(二)定制拍照
  3. XDP/eBPF — 架构设计
  4. Serverless 解惑——函数计算如何访问 SQL Server 数据库
  5. python中unique函数_正在计算unique()的返回值
  6. telegraf output input 配置用法
  7. 【干货】史上最全的Tensorflow学习资源汇总
  8. 计算机常用英语(2)
  9. 2019蓝桥杯省赛---java---C---5(最大降雨量)
  10. Vue中 $ref 的用法
  11. window自动任务
  12. mapreduce task与spark task对比
  13. c语言上机南开100题,南开100题上机c语言
  14. 早上集合竞价抓涨停板,集合竞价抓涨停板公式
  15. 项目管理六大制约因素_项目管理有哪些主要风险及如何控制?
  16. 从零开始的unity3d入门教程(二)----基本功能讲解
  17. Kali linux最新2018年安装Netspeed
  18. 什么样的女孩是真正爱你的!
  19. 2023年最热门的网络安全岗位分析
  20. 【深入设计模式】装饰模式—什么是装饰模式?装饰模式在源码中的应用

热门文章

  1. 红旗桌面4.0版最新使用方法和问题解答245例(转)
  2. Project Euler 62:Cubic Permutations
  3. 计算机系统结构第二章课件,计算机系统结构第二章new解析课件
  4. VTP的简单应用和配置
  5. 设计师推荐40个时尚的复古字体设计
  6. English,The Da Vinci Code,Chapter 5
  7. Java学习笔记:匿名类
  8. Java 课程(正在更新)
  9. 总、分机构企业所得税分配计算实例
  10. 深入掌握大数据Kafka的使用(基于Python开发)-张明阳-专题视频课程