不可预测的文件描述符泄漏
Unpredictable File Descriptor leak
好吧,所以我正在调查这似乎是FD泄漏。
这是C 11编写的Linux CPPCMS应用程序,我用发送约250个请求/秒的工具对其进行测试。
测试是在30分钟内,有时我会得到LightTPD (server.c.1446) [note] sockets disabled, out-of-fds
错误。
我已经开始使用watch "sudo ls /proc/<lighttpd>/fd/ | wc -l; echo /;sudo ls /proc/<myApp>/fd/ | wc -l;echo /; sysctl fs.file-nr"
结果似乎说一切都很好,直到一切都不行。FD稳定(50-100),并随机提升到LightTPD Max -Fd号码。如果我的申请涉及,我认为它将发生较早(不是在200000个成功的请求之后)
我已经使用Valgrind尝试看到任何东西,我发现了这一点:
==5647== Open AF_UNIX socket 6: <unknown>
==5647== at 0x8E379EA: socketpair (syscall-template.S:84)
==5647== by 0x97F8001: booster::aio::socket_pair(booster::aio::stream_socket&, booster::aio::stream_socket&) (stream_socket.cpp:570)
==5647== by 0x7312766: cppcms::service::setup_exit_handling() (service.cpp:378)
==5647== by 0x73135C7: cppcms::service::run() (service.cpp:572)
==5647== by 0x43F56E: MainMngr::runServer() (mainmngr.cpp:46)
==5647== by 0x443A95: main (main.cpp:22)
==5647==
==5647== Open AF_UNIX socket 5: <unknown>
==5647== at 0x8E379EA: socketpair (syscall-template.S:84)
==5647== by 0x97F8001: booster::aio::socket_pair(booster::aio::stream_socket&, booster::aio::stream_socket&) (stream_socket.cpp:570)
==5647== by 0x7312766: cppcms::service::setup_exit_handling() (service.cpp:378)
==5647== by 0x73135C7: cppcms::service::run() (service.cpp:572)
==5647== by 0x43F56E: MainMngr::runServer() (mainmngr.cpp:46)
==5647== by 0x443A95: main (main.cpp:22)
我无法说这是否是真实的文件描述符泄漏,但似乎是如此。
我的代码有问题吗?CPPCM有问题吗?您是否遇到过这样的问题?您是否有任何提示来检测谁将文件描述符句柄从100增加到8000?
对不起。LightTPD 1.4.43中有一个回归,其中MOD_CGI和CGI POST 请求。问题和补丁的描述可在https://redmine.lighttpd.net/issues/2771
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- 使用VerQueryValue检索应用程序的文件描述
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- Klocwork Inside的资源泄漏
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 不可预测的文件描述符泄漏