簡體   English   中英

不可預測的文件描述符泄漏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM