LinuCレベル3 プラットフォームスペシャリスト プラットフォームの最適化 問13
プラットフォームの最適化/カーネルパラメータによるリソース最適化物理メモリ16GiB、スワップ4GiBのサーバーで、vm.overcommit_memory = 2、vm.overcommit_ratio = 50 を設定した。ヒュージページは確保しておらず、vm.overcommit_kbytesは0である。このときの/proc/meminfoのCommitLimitの値として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「プラットフォームの最適化」に対応。実際の試験問題ではありません)
- A8GiB
- B10GiB
- C12GiB
- D20GiB
正解:C
解説
vm.overcommit_memoryを2にすると、カーネルはプロセスに約束(コミット)したメモリの合計がCommitLimitを超える割り当て要求を拒否します。CommitLimitは、vm.overcommit_kbytesが0のとき「(物理メモリ − ヒュージページ)× overcommit_ratio ÷ 100 + スワップ」で計算されます。この例では 16GiB × 50 ÷ 100 + 4GiB = 12GiB です。overcommit_ratioは物理メモリにだけ掛かり、スワップは全量が加算される点に注意します。現在コミットされている量は/proc/meminfoのCommitted_ASで確認できます。
選択肢ごとの解説
- A誤り。8GiBは物理メモリに比率50%を掛けた値だけで、スワップの4GiBが加算されていません。
- B誤り。10GiBは物理メモリとスワップの合計20GiBに50%を掛けた値です。比率はスワップには掛からず、スワップは全量が加算されます。
- C正しい。16GiB × 50 ÷ 100 + 4GiB で、CommitLimitは12GiBになります。
- D誤り。20GiBは物理メモリとスワップを単純に合計した値で、overcommit_ratioが考慮されていません。