Il y a beaucoup de mémoire libre, mais ces zones sont totalement fragmentées :
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
Il reste très peu de pages de commande non nulles, aucune dans une zone.
Je ne peux rien garantir, mais vous pouvez essayer de désactiver ksmd et de recompacter la mémoire. Le compactage n'est appelé automatiquement que sur les allocations de pages d'ordre supérieur et n'appelle jamais oom-killer, donc je suppose que le système a essayé d'allouer de la mémoire à partir des ordres 2 ou 3 et s'est bloqué.
Pour compacter la mémoire, exécutez echo 1 >/proc/sys/vm/compact_memory
Il n'y a pas grand-chose à faire dans cette question, mais je soupçonne ksmd
provoque la fragmentation en recherchant les pages dupliquées dans les deux machines virtuelles et en les échangeant partout.
La réponse de @ Matthew doit être marquée comme solution à ce problème. Le /proc/buddyinfo
montre clairement la fragmentation (due à ksmd ou à un autre comportement). Le compactage de la mémoire est une solution valable.
Nous venons de rencontrer le même problème sur notre serveur :
# 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
Cela montre clairement la fragmentation, puisque la plupart de la mémoire est fragmentée en plusieurs petits blocs de mémoire (grand nombre à gauche, zéro à droite).
Maintenant, le compactage résout cela :
# 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