[英]Unpredictable File Descriptor leak
好的,所以我正在調查哪個似乎是FD泄漏。
這是一個用C ++ 11編寫的linux CppCms應用程序,我使用發送大約250次請求/秒的工具對其進行了測試。
測試是在30分鍾內進行的,有時我(server.c.1446) [note] sockets disabled, out-of-fds
了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)
我不能說這是否是真正的文件描述符泄漏,但似乎是這樣。
我的代碼有問題嗎? CppCms是否有問題? 你遇到過這樣的問題嗎? 您有什么技巧來檢測誰將文件描述符句柄從100增加到8000?
抱歉。 lighttpd 1.4.43中使用mod_cgi和CGI POST請求進行了回歸。 問題和補丁的描述可在https://redmine.lighttpd.net/issues/2771中找到
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.