前言
近期在工作中,遇到了一次很有意思的内存泄漏,把排查过程和思路记下来,供大家参考和学习,如有不正确的,欢迎指正。
起因
最近几天很多半托管客户,突然报连接服务失败,登上服务器后查看内存很高,为了让客户尽快恢复业务,运维同事第一时间选择了重启。
top图
重启后,内存肉眼可见的速度涨了上来,研发同事判断后,可能之后又需要重启,临时给客户部署了备用服务。(不管三七二十一先扩容)
冰山一角
- • 日志
- 日志
Too many open files 代表已经到了当前进程可以打开的最大文件数,第一时间选择了先加大当前进程打开的最大文件数,让后续的请求可以正常处理
echo - n "Max open files=85535:85535" > /proc/pid/limits
通过命令查看当前已经打开的文件数
lsof -p pid | wc -l 43326
正常的进程不可能打开这么多fd,所以应该存在连接泄漏
lsof - p pid | grep can't identify protocol