Kernel panic sur mmap et corruption de page cache avec PostgreSQL 15

Posté par gilbert33 le 02/04/2026
RÉSOLU

gilbert33

Membre depuis le 27/01/2025

on a un souci tres grave sur un cluster postgresql de prod. le kernel panic de facon aleatoire environ une fois par jour. la trace pointe vers du memory management

on est sur ubuntu 22.04 kernel 5.15. postgresql utilise des huge pages. quand le panic arrive on perd les dernieres minutes d ecriture meme avec le wal sur disque

Commentaires

anastasie-clement

Membre depuis le 04/05/2025

ça sent le bug de driver storage ou une barrette de ram foireuse. poste le panic log complet qui sort de kdump ou de ton serial console

gilbert33

Membre depuis le 27/01/2025

voila le bout de log que j ai pu recup via netconsole


BUG: unable to handle page fault for address: ffff888123456788
RIP: 0010:__free_pages_ok+0x12/0x250
Call Trace:
  free_unref_page_prepare+0x120/0x1a0
  free_unref_page+0x15/0x70
  __put_page+0x32/0x40
  pagecache_get_page+0x120/0x230

corinne64

Membre depuis le 17/07/2024

le call trace montre clairement que le kernel essaie de liberer une page qui est deja foireuse ou mal mappee dans le page cache. est ce que vous utilisez du zfs ou du xfs

gilbert33

Membre depuis le 27/01/2025

on est sur du xfs avec un raid10 de nvme samsung. le fs a ete créé avec les options par defaut

on a aussi du transparent hugepages activé par defaut sur cette version d ubuntu

anastasie-clement

Membre depuis le 04/05/2025

desactive thp direct. postgresql et thp ça a toujours fait des trucs bizarres surtout sur les operations de compactage memoire en background


echo never > /sys/kernel/mm/transparent_hugepage/enabled

corinne64

Membre depuis le 17/07/2024

je parie sur une race condition entre le mechanisme de copy-on-write de postgres et le kernel. postgres fait des doubles ecritures parfois. vous avez quoi en config de shared_buffers

gilbert33

Membre depuis le 27/01/2025

shared_buffers est a 128gb sur une machine de 512gb. on a configuré 64000 huge pages de 2mb manuellement dans sysctl

anastasie-clement

Membre depuis le 04/05/2025

ton souci vient peut etre de la fragmentation memoire. si le kernel n arrive plus a allouer de pages contigues pour le page cache a cause des huge pages statiques ça peut paniquer si un driver essaie de faire du dma mal foutu

lance un cat /proc/buddyinfo pour voir l etat de tes zones memoire

gilbert33

Membre depuis le 27/01/2025

resultat de buddyinfo


Node 0, zone Normal 120 54 21 10 5 2 0 0 0 0 0
Node 1, zone Normal 45 32 12 5 2 0 0 0 0 0 0

c est la catastrophe non. les ordres superieurs sont tous a zero

corinne64

Membre depuis le 17/07/2024

ouais ta memoire est completement fragmentee. le kernel ne peut plus sortir une page de plus de 4kb. ton driver de raid ou de reseau doit paniquer quand il demande un buffer contigu pour ses requetes

augmente le min_free_kbytes pour forcer le kernel a garder de la marge


sysctl -w vm.min_free_kbytes=4194304

anastasie-clement

Membre depuis le 04/05/2025

et passe ton vm.zone_reclaim_mode a 0 si c est pas deja fait pour eviter que le kernel s excite a essayer de bouger des pages entre les nodes numa en plein milieu d une ecriture disque

gilbert33

Membre depuis le 27/01/2025

j ai appliqué les reglages. j ai aussi remarqué que le firmware des samsung nvme avait une mise a jour pour des problemes de corruption de donnees sur les gros write buffers

j ai flashé le firmware et rebooté les noeuds

corinne64

Membre depuis le 17/07/2024

le firmware ssd + la fragmentation ram c est le combo gagnant pour un kernel panic. tiens nous au jus si ca replante dans les 24h

gilbert33

Membre depuis le 27/01/2025

ça fait 48h que ça tourne sans aucun crash. les perfs sont plus stables aussi. merci pour l aide sur buddyinfo j avais jamais regardé ce fichier

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire