首页 > 系统相关 >linux内存管理 rsyslog进程占用高内存

linux内存管理 rsyslog进程占用高内存

时间:2023-07-01 13:44:06浏览次数:47  
标签:service Max 内存 rsyslog linux server07 rsyslogd

rsyslog进程占用内存巨高

发生险情后,立即进行排查,发现有1个节点还没有完全僵死,还能连上,只是非常卡,现象是

  • 1、内存被完全耗尽,系统swap被占用超过80%,操作非常卡顿
  • 2、负载贼高,16核的机器负载达到120+
  • 3、除了业务的进程占用内存高之外,还有一个进程占用内存也很高,rsyslogd
  • 4、osd进程死的死,不死的也无法与外界通信

经过排查,业务进程占用超高内存是因为发生写入阻塞,发生写入阻塞的原因是什么呢?排查监控日志判断是内存不足,导致osd缓慢,写入延迟开始增大,发生业务阻塞,然后内存耗尽,于是开启了链式反应

内存不足的原因没有查到,之前加了监控的进程没有明显的内存问题,所以针对内存占用高的rsyslogd进程进行重启后,内存降下来了,集群恢复正常,然鹅,过了一段时间,rsyslogd进程的内存又不安份地快速增长了,这次决定深入排查

【1】fopen() failed: 'No space left on device', path: '/var/lib/rsyslog/imjournal.state.tmp'

(1)排查过程

查看进程状态,发现有相关报错信息

[root@server07 tanweijie]# systemctl status  rsyslog.service
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2019-08-13 10:53:53 CST; 1 weeks 1 days ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 5011 (rsyslogd)
   CGroup: /system.slice/rsyslog.service
           └─5011 /usr/sbin/rsyslogd -n

8月 21 08:50:42 server07 rsyslogd[5011]: fopen() failed: 'No space left on device', path: '/var/lib/rsyslog/imjournal.state.tmp'  [v8.24.0 try http://www.rsyslog.com/e/2013 ]
8月 21 08:50:42 server07 rsyslogd[5011]: fopen() failed: 'No space left on device', path: '/var/lib/rsyslog/imjournal.state.tmp'  [v8.24.0 try http://www.rsyslog.com/e/2013 ]
8月 21 08:50:42 server07 rsyslogd[5011]: fopen() failed: 'No space left on device', path: '/var/lib/rsyslog/imjournal.state.tmp'  [v8.24.0 try http://www.rsyslog.com/e/2013 ]
8月 21 08:50:52 server07 rsyslogd[5011]: fopen() failed: 'No space left on device', path: '/var/lib/rsyslog/imjournal.state.tmp'  [v8.24.0 try http://www.rsyslog.com/e/2013 ]
8月 21 08:50:55 server07 rsyslogd[5011]: action 'action 1' resumed (module 'builtin:omfile') [v8.24.0 try http://www.rsyslog.com/e/2359 ]
8月 21 08:50:55 server07 rsyslogd[5011]: action 'action 1' resumed (module 'builtin:omfile') [v8.24.0 try http://www.rsyslog.com/e/2359 ]
8月 21 08:55:01 server07 rsyslogd[5011]: action 'action 0' resumed (module 'builtin:omfile') [v8.24.0 try http://www.rsyslog.com/e/2359 ]
8月 21 08:55:01 server07 rsyslogd[5011]: action 'action 0' resumed (module 'builtin:omfile') [v8.24.0 try http://www.rsyslog.com/e/2359 ]
8月 21 23:53:02 server07 rsyslogd[5011]: action 'action 2' resumed (module 'builtin:omfile') [v8.24.0 try http://www.rsyslog.com/e/2359 ]
8月 21 23:53:02 server07 rsyslogd[5011]: action 'action 2' resumed (module 'builtin:omfile') [v8.24.0 try http://www.rsyslog.com/e/2359 ]

调查内存

[root@server07 tanweijie]# /usr/bin/cat /proc/5011/status|/usr/bin/grep -w 'VmRSS'
VmRSS:     6916064 kB
[root@server07 tanweijie]# free -m
              total        used        free      shared  buff/cache   available
Mem:          63844       44074        5399        3275       14370       14112
Swap:             0           0           0

 

对于内存已经比较吃紧的系统来说,接近7G的占用还是不能接受的,此前故障发现rsyslogd占用超过15G…

既然报了空间不足的错,看了下系统目录,没有发现空间不足~看了下监控日志,也没有发现这段时间有磁盘空间占满的情况

[root@server07 tanweijie]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G   18G   33G   36% /
devtmpfs                  32G     0   32G    0% /dev
tmpfs                     32G     0   32G    0% /dev/shm
tmpfs                     32G  3.2G   28G   11% /run
tmpfs                     32G     0   32G    0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M   14% /boot
/dev/mapper/centos-home  1.1T  260G  775G   26% /home

 

 

解决办法

一轮google后,基本没有找到有用的信息,解决办法倒是找到不少,其中最简单的莫过于限制内存的使用(如果有读者朋友知道原因,欢迎指教)

下面我们通过限制这个rsyslog.service的最大使用内存,来保护我们的节点,这里又不得不再吹一次systemd的强大,记得在早前我们将进程绑定到指定的cpu运行的调研中.

  发现可以在service文件中加入参数CPUAffinity来指定程序运行的cpu,这里我们再次使用相同的套路,systemd支持的service配置再一次强大,相关参数:

  可以看到,我们不仅可以限制RSS使用,还可以限制CPU、stack段大小、data段大小等,十分强大

另外,根据redhat的官方文档,还可以使用诸如CPUQuota=20%MemoryLimit=500M等方式来实现进程的资源控制,不过这里我们未对这部分参数进行测试

加入这些限制的操作很简单

方法1:

  首先打开进程的service,一定要加--full,否则打开后是空白文件

# 任选其一
systemctl edit rsyslog.service --full
vim /usr/lib/systemd/system/rsyslog.service

 

然后,加入参数,这里我们限制rsyslogd进程使用最大物理内存为1G,因此加入LimitRSS=1073741824到service域中,cat一下看看

[root@server07 tanweijie]# systemctl cat rsyslog.service
# /etc/systemd/system/rsyslog.service
[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]
LimitRSS=1073741824
Type=notify
EnvironmentFile=-/etc/sysconfig/rsyslog
ExecStart=/usr/sbin/rsyslogd -n $SYSLOGD_OPTIONS
Restart=on-failure
UMask=0066
StandardOutput=null
Restart=on-failure

[Install]
WantedBy=multi-user.target
;Alias=syslog.service

方法2:

在 Service 配置中 添加MemoryAccounting=yes,MemoryMax=80M,MemoryHigh=8M 

 

不管用哪个方法,重新载入并重启进程

[root@server07 tanweijie]# systemctl daemon-reload
[root@server07 tanweijie]# systemctl restart rsyslog.service

最后,我们再次确认RSS限制是否生效

[root@server07 tanweijie]# ps -ef|grep rsyslog
root     1289301       1  0 10:34 ?        00:00:00 /usr/sbin/rsyslogd -n
root     1292065 1289493  0 11:03 pts/0    00:00:00 grep --color=auto rsyslog
[root@server07 tanweijie]# cat /proc/1289301/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          1073741824           1073741824           bytes
Max processes             255284               255284               processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       255284               255284               signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

 

可以看到,Max resident set已经设置为1G,默认是unlimited的。

运行一段时间后,rsyslogd进程未见内存异常占用

总结

  rsyslog进程此前我没有关注过,没有发现这个进程会占用大量内存的情况,其他环境也没有发现,所以很是奇怪。通过这次事件的解决,我们又掌握了精细化控制进程资源使用的手段,在service文件中设置指定参数,简单有效

参考资料

  • 本文作者:奋斗的松鼠 - [email protected]
  • 本文链接: http://www.strugglesquirrel.com/2019/09/06/集群运维大宝剑之内存耗尽排查/
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

标签:service,Max,内存,rsyslog,linux,server07,rsyslogd
From: https://www.cnblogs.com/gered/p/17519186.html

相关文章

  • 关于Linux-Kernel-Live-patching-的效果演示-kpatch auto-配置
    本文为了演示出效果,准备了如下的环境操作系统:RedHatEnterpriseLinuxrelease8.7(Ootpa)内核版本:4.18.0-372.9.1.el8.x86_64 1、关于操作系统版本、内核、内核相关的软件包版本,情况如下:[root@qq-5201351~]#cat/etc/redhat-releaseRedHatEnterpriseLinuxrelease......
  • postgresql 14安装步骤(linux)
     ps:(跟别人视频看的,有坑,记得全看完)打开官网https://www.postgresql.org/download/linux/redhat/选择需要数据库的版本,虚拟机系统根据官方文档的步骤安装即可(我用的是postgresql14+centos7,主要是学习测试使用)  按照步骤安装:(yum)1.配置yum源sudoyuminstall-y......
  • Linux Shell文本处理
    预计更新1:基础知识简介和安装基本命令变量和环境变量2:流程控制条件语句循环语句函数3:文件处理文件读写文件权限和所有权文件搜索和替换4:网络和进程网络通信进程管理信号处理5:文本处理正则表达式文本分析和处理生成报告和日志6:用户界面命令行参数和选......
  • Linux Shell基础知识
    预计更新1:基础知识简介和安装基本命令变量和环境变量2:流程控制条件语句循环语句函数3:文件处理文件读写文件权限和所有权文件搜索和替换4:网络和进程网络通信进程管理信号处理5:文本处理正则表达式文本分析和处理生成报告和日志6:用户界面命令行参数和选......
  • Linux Shell流程控制
    预计更新1:基础知识简介和安装基本命令变量和环境变量2:流程控制条件语句循环语句函数3:文件处理文件读写文件权限和所有权文件搜索和替换4:网络和进程网络通信进程管理信号处理5:文本处理正则表达式文本分析和处理生成报告和日志6:用户界面命令行参数和选......
  • Linux主流架构运维工作简单剖析
    随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统平台,例如CentOS、RedHat、Ubuntu、Fedora等等,成千上亿个网站涌现在当今互联网,互联网已经成为必不可少的工具,那今天我们跟大家一起来分享讨论目前用的最多的Linux下主流网站架构。随着IT运维......
  • Linux Shell文件处理
    预计更新1:基础知识简介和安装基本命令变量和环境变量2:流程控制条件语句循环语句函数3:文件处理文件读写文件权限和所有权文件搜索和替换4:网络和进程网络通信进程管理信号处理5:文本处理正则表达式文本分析和处理生成报告和日志6:用户界面命令行参数和选......
  • linux-tina-编译篇
    此篇对于网上搜寻的t113内核编译的整合篇:参考链接:芒果派百问网百问网是不能操作文件系统的,即是只读模式。芒果派也多多少少有很多的问题。下载与解压:这里以芒果派为例子,我是用百度盘下载的,git国内的网实在是更新不了。更新之后按照要求解压tarxvzfTinna..   然......
  • 安装Docker容器(Linux系统)
    环境:CentOS7更新yum包[root@Master~]#yumupdateLoadedplugins:fastestmirrorDeterminingfastestmirrors*base:mirrors.aliyun.com*extras:mirrors.aliyun.com*updates:mirrors.aliyun.combase......
  • Linux 上的 .NET 如何自主生成 Dump
    一:背景1.讲故事前几天微信上有位朋友找到我,说他程序的线程数会偶发性瞬时飙高,让我看下大概是什么原因,截图如下:如果这种问题每天都会出现,比较好的做法就是用dotnet-trace捕获ThreadCreated事件,但可气的是朋友说大概一个月发生次把,这种情况下用dotnet-trace持续监视就没必要......