LinuCレベル4 システムアーキテクト 性能・拡張性の設計 問25
性能・拡張性の設計/性能見積もりと評価高アクセスが想定されるWebサーバーの負荷テスト中に「Too many open files」エラーが発生し、リクエストを受け付けられなくなった。この問題への設計対処として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「性能・拡張性の設計」に対応。実際の試験問題ではありません)
- AファイルシステムをXFSに変更し、ランダムI/Oに強いI/Oスケジューラを設定してディスクアクセスを高速化する
- Bスワップ領域を増やして仮想メモリを拡張し、ファイルディスクリプタの確保に必要なカーネルメモリの不足を補う
- Cログ出力を非同期化してログファイルへのI/Oで消費されるファイルディスクリプタ数を削減し、枯渇を緩和する
- DLimitNOFILEをピーク時の最大接続数に見合う値に設定し、システム全体のfs.file-maxも不足がないか確認する
正解:D
解説
「Too many open files」はプロセスが開けるファイルディスクリプタ数の上限(ulimitのnofileまたはsystemdのLimitNOFILE)に達したことを示します。Webサーバーではクライアントとのソケット、静的ファイル、ログファイルなどがファイルディスクリプタを消費します。対処はLimitNOFILEをピーク時の同時接続数やオープンファイル数を踏まえた値に引き上げ、システム全体のfs.file-maxも不足しないよう確認することです。ファイルシステムの変更やスワップの増加はこの問題の原因ではありません。
選択肢ごとの解説
- A誤り。ファイルシステムやI/Oスケジューラの変更はディスクI/O性能に影響しますが、ファイルディスクリプタ数の上限とは無関係です。
- B誤り。スワップの拡張は仮想メモリの補助であり、ファイルディスクリプタの上限値とは直接関係ありません。
- C誤り。ログI/Oの非同期化はスループット改善には寄与しますが、ファイルディスクリプタ枯渇の根本対処にはなりません。上限値そのものを引き上げる必要があります。
- D正しい。LimitNOFILEとfs.file-maxを実際の最大使用量に見合う値に設定することが、ファイルディスクリプタ枯渇への根本対処です。