0

わかりましたので、FDリークと思われるものを調査しています。

これは C++11 で記述された Linux CppCms アプリケーションです。約 250 リクエスト/秒を送信するツールでテストしました。

テストは 30 分間行われ、ときどき lighttpd(server.c.1446) [note] sockets disabled, out-of-fdsエラーが発生します。

を使用してFDの調査を開始しました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 に増やしているかを検出するためのヒントはありますか?

4

1 に答える 1

1

ごめん。lighttpd 1.4.43 では、mod_cgi および CGI POSTリクエストでリグレッションがあります。問題とパッチの説明はhttps://redmine.lighttpd.net/issues/2771にあります

于 2016-12-08T13:51:02.890 に答える