我有一个运行内核 3.13.0-74 和 32GB RAM 的 Ubuntu 14.04.3 机器,其中有一个发疯的 rsyslogd 进程:
$ ps -auxww | grep rsyslog
syslog 16212 0.7 64.0 27966168 21070336 ? Ssl Jan04 180:31 rsyslogd -c 5 -x
$ free -m
total used free shared buffers cached
Mem: 32142 31863 278 228 9 363
-/+ buffers/cache: 31490 651
Swap: 16383 11937 4446
我知道 ps 的输出不能完全依赖等,但肯定有点高!我还有两台具有相同软件的同级机器(从同一时间开始运行),并且在两台同级机器上,rsyslogd 表现更好(每台机器仍然使用大约 3.5GB)。
这是 rsyslogd 7.4.4,我知道内存泄漏已在新版本中修复。
我的问题:在我急于升级之前,如果可能的话,我想收集一些证据来证明我确实遇到了漏洞。我暂时让 rsyslogd 保持运行状态,但用不了多久它就会搅动所有交换,因此需要尽快采取行动......
我收集证据的一件事是atop
。这清楚地显示了泄漏何时开始发生(我不记得当时对盒子做了任何特殊的事情)。有趣的是,在内存开始增长的同时,磁盘写入活动却急剧下降——尽管它并没有完全停止。文件系统在容量方面表现良好。
$ atop -r atop_20160117 | grep rsyslogd
PID SYSCPU USRCPU VGROW RGROW RDDSK WRDSK ST EXC S CPU CMD
16212 0.03s 0.06s 0K 0K 0K 96K -- - S 0% rsyslogd
16212 0.11s 0.22s 0K 0K 0K 1844K -- - S 2% rsyslogd
16212 0.03s 0.12s 0K 0K 0K 564K -- - S 1% rsyslogd
16212 0.04s 0.06s 0K 0K 0K 96K -- - S 1% rsyslogd
16212 0.08s 0.19s 0K 0K 0K 1808K -- - S 1% rsyslogd
16212 0.04s 0.11s 0K 0K 0K 608K -- - S 1% rsyslogd
16212 0.02s 0.07s 0K 0K 0K 116K -- - S 0% rsyslogd
16212 0.06s 0.04s 0K 2640K 0K 144K -- - S 1% rsyslogd
16212 0.02s 0.02s 0K 1056K 0K 0K -- - S 0% rsyslogd
16212 0.01s 0.01s 0K 264K 0K 0K -- - S 0% rsyslogd
16212 0.02s 0.04s 0K 2904K 0K 0K -- - S 0% rsyslogd
16212 0.02s 0.02s 0K 1056K 0K 0K -- - S 0% rsyslogd
16212 0.02s 0.00s 0K 264K 0K 0K -- - S 0% rsyslogd
16212 0.06s 0.09s 75868K 3532K 208K 0K -- - S 1% rsyslogd
16212 0.02s 0.02s 0K 792K 0K 0K -- - S 0% rsyslogd
16212 0.01s 0.01s 0K 264K 0K 0K -- - S 0% rsyslogd
16212 0.05s 0.03s 0K 3168K 0K 0K -- - S 0% rsyslogd
16212 0.02s 0.02s 0K 1056K 0K 0K -- - S 0% rsyslogd
16212 0.00s 0.01s 0K 264K 0K 0K -- - S 0% rsyslogd
16212 0.03s 0.10s 0K 2904K 0K 0K -- - S 1% rsyslogd
16212 0.02s 0.02s 0K 792K 0K 0K -- - S 0% rsyslogd
16212 0.00s 0.02s 0K 264K 0K 0K -- - S 0% rsyslogd
16212 0.04s 0.03s 0K 2904K 0K 160K -- - S 0% rsyslogd
16212 0.02s 0.02s 0K 792K 0K 0K -- - S 0% rsyslogd
编辑:这是 Zabbix 为该盒子提供的可用内存图; 1 月 17 日 9:30 左右开始下降,与atop
上述产量一致。
最终编辑:我不得不重新启动rsyslogd
;它释放了惊人的 20 GB,确认 - 如果有任何疑问 - 它是罪魁祸首:
free -m
total used free shared buffers cached
Mem: 32142 11325 20817 282 56 473
-/+ buffers/cache: 10795 21347
Swap: 16383 5638 10745
唉,仅仅运行了 12 个小时,现在就恢复到了 4GB 以上。显然有些事情不对劲;我得尝试一下升级路径...
答案1
文件/lib/systemd/system/rsyslog.services
[Service]
MemoryAccounting=yes
MemoryCurrent=8192000
MemoryLimit=8192000
答案2
就我而言(centos 7 服务器),重新启动服务rsyslog
效果很好!rsyslogd
过程居民内存使用量从 5GB 下降到 9MB!
systemctl restart rsyslog