Maison > Article > base de données > Comment résoudre l'erreur overcommit_memory dans la base de données Redis sous Linux
Le Redis de l'entreprise ne parvient parfois pas à sauvegarder la base de données en arrière-plan. L'alarme suivante est détectée dans le journal, ce qui en est probablement la cause :
[13223] 17 mars 13:18:02.207 # AVERTISSEMENT overcommit_memory est défini sur 0 ! La sauvegarde en arrière-plan peut échouer en cas de mémoire insuffisante. Pour résoudre ce problème, ajoutez « vm.overcommit_memory = 1 » à /etc/sysctl.conf, puis redémarrez ou exécutez la commande « sysctl vm.overcommit_memory=1 » pour que cela prenne effet.
Après avoir cherché, j'ai découvert que certaines personnes ont rencontré le même problème que moi, et il est fondamentalement déterminé qu'il en est la cause.
C'est 内存分配策略
Valeurs facultatives : 0, 1, 2.
0 signifie que le noyau vérifiera s'il y a suffisamment de mémoire disponible pour que le processus d'application puisse l'utiliser ; s'il y a suffisamment de mémoire disponible, l'application de mémoire est autorisée, sinon l'application de mémoire échoue et une erreur est renvoyée ; processus de candidature.
1, indique que le noyau permet d'allouer toute la mémoire physique quel que soit l'état actuel de la mémoire.
2, indiquant que le noyau permet une allocation de mémoire qui dépasse la somme de toute la mémoire physique et de l'espace d'échange
Linux répond "oui" à la plupart des demandes de mémoire afin qu'il puisse exécuter un programme plus volumineux. Car après avoir demandé de la mémoire, la mémoire ne sera pas utilisée immédiatement. Cette technique est appelée Overcommit. Lorsque Linux détecte une mémoire insuffisante, il déclenche le fonctionnement du tueur OOM (OOM signifie mémoire insuffisante). Afin de libérer de la mémoire, il donnera la priorité à la suppression de certains processus en mode utilisateur plutôt que des threads du noyau.
Lorsque oom-killer se produit, quels processus Linux choisira-t-il de tuer ? La fonction qui sélectionne le processus est la fonction oom_badness (dans mm/oom_kill.c), qui calcule le nombre de points (0~1000) pour chaque processus. Plus le score est élevé, plus le processus a de chances d’être interrompu. Le nombre de points par processus est lié à oom_score_adj, et oom_score_adj peut être défini (-1000 est le plus bas, 1000 est le plus élevé).
C'est très simple, suivez simplement les instructions (définissez vm.overcommit_memory sur 1) :
Il existe trois façons de modifier les paramètres du noyau, mais vous avez besoin des autorisations root :
(1) Modifier/ etc/sysctl.conf, modifiez vm.overcommit_memory=1, puis sysctl -p pour que le fichier de configuration prenne effet
(2) sysctl vm.overcommit_memory=1
(3) echo 1 > proc/sys/ vm/overcommit_memory
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!