これはFDリークのようです。予測不可能なファイル記述子リーク
これはLinuxのCppCmsアプリケーションで、C++ 11で書かれています。私は約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を調査し始めました
はそれがありませんまですべてがうまくていると言っているようです。 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に増やしている人を検出するヒントはありますか?
でご覧になれます。 –
かなり大きなプロジェクトですが、私はそれが互換性のない部分を置くことは関係ありません。私はそれを説明することができます、私のメインはマネージャーをインスタンス化し、マネージャーはメンバーとしてcppcms :: applicationとcppcms :: application :: runを呼び出すrunServer mthodを持っています。私はaplication_poolを使って、各サービスにcppcms URLをマップするクラスをマウントします。このコードはほとんどの場合に機能し、過負荷のときにのみ失敗します。 – MokaT
実際にはcppcmsの場合は、残念ながら小さな例で問題を特定して調べる必要があるため、現在の情報では不十分であり、私自身はこのような問題に遭遇していません(しかし、私がこれを行うならば必ず更新してください)。 – ZN13