#現象
物理メモリ1台16GBの環境でメモリの割り当てをデフォルトの無制限(-1)にしていたが、すぐに食い潰してswapに落ちてしまうためパフォーマンスが劣化しているように見える。
#impalaに割り当てるリソース管理箇所
プロパティ | 設定名 | デフォルト | 説明 |
---|---|---|---|
impala deamon memory limit | mem_limit | null | |
CPU共有 | cpu.shares | 1024 | |
Cgroup I/O weight | blkio.weight | 500 | |
Cgroup Memory Soft limit | memory.soft_limit_in_bytes | -1MB | |
メモリのハード制限 | memory.limit_in_bytes | -1MB |
#Cgroupとは?
cgroup(control group)
Control Group、Linux Containerの紹介
Performance Prediction and Optimization using Linux/cgroups
memory.limit_in_bytes
ユーザーメモリーの最大値 (ファイルキャッシュを含む) を設定します。単位が指定されていない場合、その値はバイト単位と解釈されますが、より大きな単位を示すサフィックスを使用することが可能です (キロバイトには k または K、メガバイトには m または M、ギガバイトには g または G)。
root cgroup を制限するのには、memory.limit_in_bytes は使用できません。値を適用できるのは、下位階層のグループに対してのみです。
memory.limit_in_bytes に -1 と書き込み、現行の制限値を削除します。
#設定
ソフトリミットを設定することで、設定値内でなるべくうまく物理メモリを使ってくれて、それでもうまくいかない時はハードリミットで制限される。ハードリミットを超えてメモリ領域が必要な場合はswapに落ちるか、oom_killer等で沈静化されると解釈
そのため、ソフトリミットのmemory.soft_limit_in_bytesとハードリミットのmemory.limit_in_bytesを設定してみた。
プロパティ | 値 |
---|---|
物理メモリ | 24GB |
memory.soft_limit_in_bytes | 18GB |
memory.limit_in_bytes | 19GB |
※上記は実験値で特に推奨値なわけではありません
#結果
memory.soft_limit_in_bytesを設定することで(少し見難いが)activeのメモリ使用量部分が18GB付近を上限に調整するようになってくれた。
#まとめ
impalaの推奨メモリが128GBとのことだが、なかなか用意するのも大変なので、安定運用や一時凌ぎには設定をしておいたほうが良い気がします。