空きメモリはたくさんありますが、これらのゾーンは完全に断片化されています:
Node 0 Normal: 1648026*4kB 0*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 6592104kB
Node 1 Normal: 8390977*4kB 1181188*8kB 0*16kB 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB
ゼロ以外の注文ページはほとんど残っておらず、1 つのゾーンにはまったく残っていません。
保証はできませんが、ksmd をオフにしてメモリを再圧縮してみてください。コンパクションは、より高いオーダーのページ割り当てでのみ自動的に呼び出され、oom-killer を呼び出すことはありません。そのため、システムがオーダー 2 または 3 からメモリを割り当てようとしてスタックしたと仮定します。
メモリを圧縮するには echo 1 >/proc/sys/vm/compact_memory
を実行します
この質問には多くのことしかありませんが、私は ksmd
を疑っています 両方の VM で複製されたページをスキャンし、ページ全体を交換することで断片化を引き起こしています。
@Matthew の回答は、この問題の解決策としてマークする必要があります。 /proc/buddyinfo
明らかに断片化を示しています (ksmd またはその他の動作による)。メモリ圧縮は有効なソリューションです。
サーバーで同じ問題が発生しました:
# cat /proc/buddyinfo
Node 0, zone DMA 1 0 1 0 0 1 0 0 0 1 3
Node 0, zone DMA32 4941 14025 10661 1462 1715 154 1 0 0 0 0
Node 0, zone Normal 420283 217678 3852 3 1 0 1 1 1 0 0
Node 1, zone Normal 1178429 294431 21420 340 7 2 1 2 0 0 0
これは明らかに断片化を示しています。これは、ほとんどのメモリが多数の小さなメモリ ブロックに断片化されているためです (左側が大きな数、右側がゼロ)。
圧縮によりこれが解決されます:
# echo 1 >/proc/sys/vm/compact_memory
# cat /proc/buddyinfo
Node 0, zone DMA 1 0 1 0 0 1 0 0 0 1 3
Node 0, zone DMA32 485 1746 8588 3311 2076 505 98 19 3 0 0
Node 0, zone Normal 83764 22474 8597 3130 1971 1421 1090 808 556 358 95
Node 1, zone Normal 51928 36053 36093 29024 21498 13148 5719 1405 151 8 0