1. 内存异常现象初现:从监控告警到初步定位
那天早上刚到办公室,监控系统的告警邮件就跳了出来——某台运行麒麟V10的服务器内存使用率已经突破90%并持续攀升。这种场景运维同学应该都不陌生,但棘手的是这台服务器跑着核心业务,不能简单重启了事。我立刻连上服务器,用老运维最熟悉的free -h命令查看,确认可用内存确实只剩几百MB。
这时候常规操作是先找"吃内存大户"。我习惯用组合命令:
ps aux --sort=-%mem | head -10输出结果里赫然出现了两个可疑进程:mate-indicators和auditd,各自占用了近20%的内存。这里有个细节要注意——如果这两个进程的CPU占用率也很高,可能是正常行为;但现在是内存单方面飙升,就指向了内存泄漏的可能。
说到mate-indicators,很多同学可能不熟悉这个组件。它其实是麒麟桌面环境的状态指示器,负责显示网络、音量这些系统托盘图标。而auditd则是Linux系统的审计守护进程,记录系统安全事件。理论上服务器环境不应该跑图形界面组件,但有些单位在部署时图方便直接用了桌面版镜像。
2. 深度排查:揪出真正的元凶
光看内存占用还不够,我们需要更精确的内存分析。这时候就该祭出smem工具了,它能显示更详细的内存分布:
smem -t -k -P 'mate-indicators|auditd'参数解释:
-t显示总计-k以KB为单位-P过滤特定进程
输出结果里重点关注USS(Unique Set Size),这是进程独占的物理内存。如果USS持续增长,基本可以确认内存泄漏。我观察到auditd的USS每小时增长约50MB,这在不频繁记录审计日志的系统上极不正常。
另一个实用技巧是用pmap查看进程内存映射:
pmap -x $(pgrep auditd) | less重点观察anon(匿名内存)段的增长情况。当时我发现有大量64MB大小的anon段,这通常是内存分配器的问题。
3. 临时止血:快速释放内存的实战技巧
业务系统等不起,得先做临时处理。对于mate-indicators,最直接的方法是重启lightdm服务:
systemctl restart lightdm但要注意这会中断所有图形会话,如果有人在用远程桌面会被强制登出。更优雅的方式是只重启指示器:
killall mate-indicators-process对于auditd,临时方案是清理审计规则并重启服务:
auditctl -D # 删除所有规则 systemctl restart auditd如果问题依旧,可以暂时停用审计:
systemctl stop auditd systemctl mask auditd # 防止开机自启不过要注意这会影响安全合规,只能在紧急情况下使用。
4. 根治方案:版本升级与配置优化
查了官方文档后发现,这确实是麒麟V10 SP1/SP2的已知问题。先确认系统版本:
nkvers | grep -i 'release'或者:
cat /etc/os-release | grep -i 'version_id'针对auditd内存泄漏,需要升级到se.12及以上版本。以SP2为例,官方更新源地址为:
https://update.cs2c.com.cn/NS/V10/V10SP2/os/adv/lic/updates/x86_64/Packages/Kylin下载后强制安装(注意处理依赖):
rpm -Uvh audit-*.rpm --nodeps --force systemctl daemon-reload对于mate-indicators,建议直接卸载图形组件:
yum remove mate-indicators如果必须保留,可以限制其内存使用:
systemctl edit mate-indicators添加:
[Service] MemoryMax=200M5. 防患未然:内存监控体系建设
问题解决后,我完善了监控策略。推荐这套组合方案:
基础监控:Zabbix或Prometheus配置内存告警,阈值建议:
- 警告阈值:70%
- 严重阈值:85%
进程级监控:用自定义脚本抓取关键进程内存:
#!/bin/bash ps -eo pid,%mem,cmd --sort=-%mem | grep -E 'mate-indicators|auditd' >> /var/log/process_mem.log- 日志分析:配置auditd的rate limiting防止日志爆炸:
auditctl -r 20 -b 8192 # 每秒20条消息,缓冲区8MB- 定期维护:设置每月自动检查更新:
yum makecache yum check-update | grep -i 'audit\|mate'这次排查让我深刻体会到,服务器环境还是应该用最小化安装。图形组件看似方便,实则隐患多多。另外,任何服务都要配置资源限制,systemd的MemoryMax这类参数真的能救命。最后提醒大家,升级前务必在测试环境验证,特别是安全组件如auditd,冒然升级可能导致审计策略失效。