2017-06-15 15 views
0

私たちは、多数の(1000以上の)子プロセスをフォークするLinuxアプリケーションを動作させます。これらの子プロセスは、UNIXデータグラムソケット(すべての子プロセスで共有される)を介してマスタープロセスと通信します。 UNIXデータグラムソケットは、ログ用の他の通信の他にも使用されます。アプリケーションが大規模な外部エラーに反応するまでシステム全体が正常に動作します - アプリケーションデータベースのクラッシュを考えましょう。このような状況では、子プロセスは大量のエラーログイベントを生成し始めます。これは、各子がそのクラッシュの影響を受けるため正しいと思われます。数分後、負荷は8000を超えて80-100%のCPUで増加します。システム(消費者ではありません)消費。状態が回復するのは、アプリが強制終了された場合、または一般的に、応答が遅いためにボックスを使用できなくなり、再起動する必要がある場合のみです。Linux UNIXソケットでのライブロック、どうすればよいですか?

コアダンプの調査では、子プロセスがUNIXソケット上のsend() syscallでブロックされ、プロセスをマスターすることが示されています。 UNIXソケットは非ブロッキングとして設定され、アプリケーションはEAGAINの適切な処理を実装します。より詳細な分析は、カーネルにライブロック状態が存在することを示します。明らかに、プロセスはUNIXソケットに関連するリソースへのアクセスのために競合しています。

質問:これまでにこのような動作をしたことがありますか? UNIXソケットの並列処理について何か不足していますか?

バージョン:
- CentOS Linuxリリース7.3.1611(コア)。
- カーネルLinux 3.10.0-514.16.1.el7.x86_64 x86_64。

+0

私はsend()でブロックされているとは言いませんが、そこではほとんどの処理時間を費やしています。ソケットバッファがいっぱいになる可能性はありますか?とにかく、カーネルのバグを考えることが私の最後の手段です。 –

+0

ソケットバッファはいっぱいですが、通常はEAGAINメカニズムb/cによって処理されます。UNIXソケットは非ブロックです。私はカーネルのバグの部分に同意します。 –

+1

失敗したセンド間に遅延(スリープなど)がない場合、これが結果になります。 –

答えて

0

カーネル側には改善の余地がありますが、チャンスはかなり低いです。私は推測するつもりはない。問題は火炎グラフで簡単に見える可能性があります。

ただし、この文脈での並べ替えの考慮事項は赤いニシンです。議論のために、カーネルが0のオーバーヘッドですべてのこれらのエラーメッセージをプッシュすると仮定します。ギガバイトの反復エラーメッセージが生成され、値が追加されませんでした。

例えば、データベースへの接続が死亡した注意し、それがアップ戻ったときに注意しますが、それぞれにログオンしていない(主要なイベントがあるときに代わりに、ちょうどたら、それをログに記録し、それがクリアされていることをもう一度ログインそれが死んでいるという質問)。あるいは、定期的にまたはratelimitでログに記録することもできます。いずれにしても、スパム送信は間違ったことです。

子供の純粋な数(1000+?)は非常に過剰であり、このプロジェクトのデザインの有効性に疑問符を付けます。あなたは何が起こっているのかを精緻化できますか?

+0

最後から始めましょう:私は、膨大な数の子プロセスを持つデザインが少なくとも贅沢であることに完全に同意します。意思決定の本来の目的はセキュリティ上のものです。各子は独自の鍵セットで暗号化されたピア接続を処理し、システム/プロセスレベルでそれを分離して保持することを意図していました。パフォーマンス面も非常に印象的で、簡単に+ 10kの同時接続、1秒あたり250トランザクション、CPUの1〜5%、システム負荷が0.1未満です。しかし、私はそれを守るためにここにいるわけではなく、次世代は "CPUコアごとのプロセス"モデルに切り替える可能性が高いです。 –

+0

主要なイベントと「管理された」ログ:はい、これは良い見解です。しかし、根本的な問題はここで解決されていません。広範なロギングをトリガーしてアプリのストールを引き起こす方法は他にもあります。 –

+0

"何も値を加えない反復的なエラーメッセージのギガバイト" - 強力なログアナライザに送られるこのアプリから生成された巨大な監査ログがあります。これらのエラーは、その視点から海に落ちています。同様の状況(アプリが停止していない場合)では、監視チャートに「良い」ピークが表示され、オペレータは迅速に対応します。しかし、再び、私はそれを守るつもりはありません - それは改善のための明確なスペースです、多分単一の、しかしより厳しいログメッセージがするでしょう。 –

関連する問題