服务器内存使用率过高 原创
✍ 道路千万条,安全第一条。操作不规范,运维两行泪。
问题
收到服务器内存使用率较高的告警,告警信息如下:
排查
这个节点是 K8S 集群的 Master 节点,按道理不应该存在占用较高内存的应用存在。
(1)使用 top 命令查看服务器的资源情况,整体占用都不高。
(2)使用 free -h ,发现共享内存占用异常高。
共享内存占用较高,可能由以下原因:
- tmpfs文件系统过大
bash
# 检查tmpfs挂载点
df -h | grep tmpfs
# 检查/dev/shm(默认tmpfs)
du -sh /dev/shm 2>/dev/null
ls -la /dev/shm/
- 大量进程间通信
shell
# 检查使用共享内存的进程
ipcs -m
# 查看共享内存段详情
ipcs -m -p
- Docker/容器内存问题
shell
# 如果使用Docker,检查容器
docker ps
docker stats --no-stream
# 检查Docker shm大小
docker inspect <container_id> | grep ShmSize
(3)通过 df -h | grep tmpfs 排查挂载点,发现把 /dev 用完了,这大概发现问题根源了。
(4)通过 du -sh /dev/* 2>/dev/null | sort -hr | head -10 查看目录中的大文件。
这就发现了异常大文件,这个文件大概率是 XX 上传的。
查看图片生成的时间是 7月22号下午14:34。
通过 history 发现这个时间段有用户进来操作过。
这里看不到做了什么,猜测是通过类似 xshell 这样的客户端上传的文件,所以在 history 中找不到记录。
解决
这种解决方案也很简单,把这个文件移出去就可以了。
移出去过去,所有一切都恢复正常了。
其他解决方案
1. 清理共享内存
shell
# 清理未使用的共享内存段(谨慎操作)
ipcs -m | awk '$6==0 {print $2}' | xargs -I {} ipcrm -m {} 2>/dev/null
2. 重启相关服务
bash
# 重启可能使用大量共享内存的服务
systemctl restart docker # 如果使用Docker
# 或重启其他相关服务
3. 临时释放缓存
shell
# 释放页面缓存(临时缓解)
sync && echo 1 > /proc/sys/vm/drop_caches