

又一次排查socket fd泄漏
source link: https://zzyongx.github.io/blogs/socket_fd_leak_2.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

又一次排查socket fd泄漏
距离上一次 socket fd泄漏 已经过去很久了,我再次碰到了 socket fd 泄漏的情况。相比上次的徒增,这次是缓慢增长,解决起来容易很多。这次决定换用更简单的方法,找找fd在哪泄漏的。
1 查找方法
思路是利用strace,跟踪 socket,connect,accept4,close
4个系统调用一段时间,然后用netstat查看当前连接用的inode,和 proc 下的fd inode对比,不在netstat中的inode就是泄漏的inode,最后对比strace里面记录的fd,查看这些fd是怎么创建的。写成脚本如下:
#!/bin/bash PID=911 DURATION=3600 strace -tt -f -p $PID -e trace=socket,connect,accept4,close 2>&1 | grep -v SIGURG > tcp.log & sleep $DURATION netstat -tenp | grep api | sort -k 8 > netstat.txt ls /proc/$PID/fd -l | grep socket | perl -ane '$F[10] =~ /socket:\[(\d+)\]/; print $F[8], " ", $1, "\n"' | sort -k 2 > fd.txt for fd in $(join -v 1 -1 2 -2 8 fd.txt netstat.txt | cut -d' ' -f2); do F=/proc/$PID/fd/$fd test -e $F && { ls -l $F grep -w $fd tcp.log | tail } done
2 查找问题根源
这次仍然是accept出的fd没释放,说明某些请求hang住了没有结束,亏得是go routine,系统没崩。查看go routine很容易找出问题所在。
类似web这种服务模式,很容易出现某些接口太耗时或有BUG,导致资源逐渐耗尽的情况。监控socket fd的使用是个不错的办法。
Recommend
-
65
由来 前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理、Bug 排查、运营 issue 处理的事。工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了。 不知道是公司网络广了就这样还是...
-
38
golang 内存泄漏的排查记录一 一、发现问题 首先通过监控工具查看到某个项目的机器内存在部署之后总是不断上涨,但是用户量并不多,很明显是内存泄漏的问题。
-
40
文章封面:成都宽窄巷子 importnew.com/29591.html 在一个凄凉的午夜 一定是网络的...
-
29
Java小能手21小时前故障案发缘起 网关上线一周以来,运行一直稳定,从未出现CPU飙高的情况。发生故障的当天,CPU开始缓慢上升,但是上升的过程并不是...
-
29
libcurl内存泄漏排查 2020/10/02 · Leave a comment 由于一些第三方平台/服...
-
7
排查 Node.js 服务内存泄漏,没想到竟是它?滴滴出行 前端工程师不止内存泄漏Chrome 也中招了吗?团队最近将两个项目迁移至 degg 2.0 中...
-
15
Netty堆外内存泄漏排查盛宴 | HeapDump性能社区文章>Netty堆外内存泄漏排查盛宴Netty堆外内存泄漏排查盛宴
-
5
系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败,这就是典型的内存泄漏问题。这类问题通常难以预测,也很难通过静态代码梳理的方式定位。Heap Profiling 就是帮助我们解决此类问题的。 TiKV 作为分布式系统的一部分,已经初步拥有了 He...
-
10
摘要:最近服务遇到了内存泄漏问题,运维同学紧急呼叫解决,于是在解决问题之余也系统记录了下内存泄漏问题的常见解决思路。 本文分享自华为云社区《
-
9
最近在做Kaldi相关开发的过程中,遇到了一个非常棘手的内存问题,现将整个排查解决过程梳理一下,希望对有类似问题的同学有帮助。 0x00 情况概述 Kaldi是一个语音识别的C++开发框架,集成了非常多的工具和模块。由于项目需要,...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK