admin管理员组文章数量:1654428
前几天服务器上出现程序cpu标高,通过gdb看堆栈信息,发现Too many open files问题
通过lsof -p pid |wc -l看到文件非常高
分析如下:
程序主要是通过360开源的evpp 调用libevent 的http接口实现简单http服务器功能。所以一开始就就直接怀疑是evpp开源代码出现的问题,然后就看源代码分析。看句柄释放位置,但是不得而终。
后面开始用strace工具分析代码调用堆栈。
1、直接前端运行代码:
strace -f -F -o dcop-strace.txt dcopserver
这里 -f -F选项告诉strace同时跟踪fork和vfork出来的进程,-o选项把所有strace输出写到dcop-strace.txt里 面,dcopserver是要启动和调试的程序。
2、运行测试用例
3、关闭程序看dcop-strace.txt文件
显然开源代码已经在http返回时候执行了关闭操作。
4、重新1-2步操作,看进程id 在看/proc/pid/fd/里面的文件句柄,
5、执行测试用例,看多出的fd是哪些
6、再看dcop-strace.txt文件发现问题,通过文件内容里面显示的上下文调用顺序就可以很容易定位到问题
版权声明:本文标题:lsof can't identify protocol 句柄泄漏分析 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729649817a1208906.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论