De temps en temps, mon "stands de serveur", car il manque à la fois de mémoire et d'échange d'espaces. (Cela continue de répondre à Ping mais rien de plus que cela, pas même SSH).
Je me suis dit que Linux fait l'accomplissement de la mémoire, ce qui, autant que je sache, c'est la même chose que les banques avec de l'argent: elle accorde de traiter plus de mémoire que réellement disponible, en supposant que la plupart des processus n'utilisent pas toute la mémoire qu'ils posent, à moins tout en même temps.
S'il vous plaît supposer que c'est en fait la cause de la raison pour laquelle mon système se bloque parfois, ne discutons pas ici si c'est le cas ou non (voir Que peut-on causer tous les services sur un serveur de descendre, mais toujours répondant à Ping? Et comment pour déterminer ).
Donc,
comment puis-je désactiver ou réduire l'accomplissement de la mémoire radicalement dans Centos? J'ai lu deux paramètres appelés vm.overcommit_memory (valeurs 0, 1 ou 2) et vm.overcommit_ratiom, mais je ne sais pas où je dois les trouver et les changer (un fichier de configuration, espérons-le), quelles valeurs dois-je essayer et si j'ai besoin de redémarrer le serveur pour rendre les modifications efficaces.
et est-ce sûr? Quels effets secondaires pourrais-je m'attendre? Lorsque Googling pour Overcommit_Memory, je trouve des choses effrayantes comme des personnes qui disent que leur serveur ne peut plus démarrer ....
Depuis ce qui provoque l'augmentation soudaine de la mémoire d'utilisation de la mémoire, MySQL en raison des requêtes fabriquées par PHP qui sont appelées à son tour tout en servant des demandes HTTP, je m'attendrais à ce qu'un seul script PHP ne parvienne pas à terminer et donc environ 500 réponse de temps en temps lorsque Le serveur est trop occupé, ce qui est un risque que je puisse prendre (certainement mieux que l'ensemble du serveur devienne inaccessible et que je dois le redémarrer dur).
Ou peut-il vraiment faire en sorte que mon serveur soit incapable de redémarrer si je choisis les mauvais paramètres?
La mémoire Overcummit peut être désactivée par vm.overcommit_memory=2
0 est le mode par défaut, où le noyau détermine heureusement l'allocation en calculant la mémoire libre par rapport à la demande d'allocation effectuée. Et le régler à 1 active le mode de sorcière, où le noyau annonce toujours qu'il a suffisamment de mémoire libre pour toute allocation. Réglage sur 2, signifie que les processus ne peuvent attribuer que jusqu'à une quantité configurable (overcommit_ratio
) de RAM et commencera à obtenir une défaillance d'une répartition ou des messages OOM lorsqu'il va au-delà de ce montant.
Est-il prudent de le faire, non. Je n'ai pas vu de cas d'utilisation appropriée où la mémoire désactivée de la mémoire surmommande a réellement aidé, à moins que vous ne soyez à 100% de la charge de travail et de la capacité matérielle. Si vous êtes intéressé, installez kernel-docs
paquet et aller à /Documentation/sysctl/vm.txt
Pour en savoir plus ou la lire en ligne .
Si vous définissez vm.overcommit_memory=2
Ensuite, il va surmonter le pourcentage de physique RAM Configuré dans vm.overcommit_ratio
(la valeur par défaut est de 50%).
echo 0/1/2 > /proc/sys/vm/overcommit_memory
Cela ne survivra pas à un redémarrage. Pour la persistance, mettez ceci en /etc/sysctl.conf
déposer:
vm.overcommit_memory=X
et courir sysctl -p
. Pas besoin de redémarrer.
Déclaration totalement non qualifiée: la désactivation de la mémoire Overcummit est définitivement "plus sûre" que de lui permettre de lui permettre.
$ client a-t-il défini sur quelques centaines de serveurs Web et cela a contribué beaucoup à des problèmes de stabilité. Il y a même un chèque Nagios appelant le feu réel fort s'il n'est jamais désactivé.
D'autre part, les gens pourraient ne pas considérer que "sûr" de faire sortir leurs processus de la mémoire quand ils aimeraient surmonter un petit RAM et ne l'utiliseraient jamais vraiment. (c'est-à-dire la sève serait un très bon exemple)
Donc, vous êtes de retour à voir si cela améliore les choses pour vous. Puisque vous en regardez déjà pour vous débarrasser des problèmes connexes - je pense que cela pourrait vous aider.
(Je sais que je risquerai un bowvote par une personne grincheuse)
Je conviens que la désactivation du surmenage est plus sûre que de lui permettre dans certaines circonstances. Si le serveur ne fonctionne que peu d'emplois de mémoire (comme des simulations de circuit dans mon cas), il est beaucoup plus sûr de refuser l'application la demande de mémoire avant que d'attendre un événement OOM (qui est certain de suivre sous peu) nous voyons souvent des serveurs. Avoir des problèmes après que l'OOM Killer ait fait son travail.