Bonjour à tous,
je rencontre actuellement un problème sur un de mes sites internet qui tourne sous Prestashop.
Le serveur est un debian 8, serveur Apache/MySQL/PHP.
Cependant, depuis quelques temps, j'ai des erreurs que je ne comprends pas trop et qui font crasher la base SQL à certains moments.
Afin de rentrer dans le vif du sujet, voici les lignes du log en question:
151205 16:51:58 mysqld_safe Number of processes running now: 0
151205 16:51:58 mysqld_safe mysqld restarted
151205 16:52:00 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
151205 16:52:00 [Note] /usr/sbin/mysqld (mysqld 5.5.44-0+deb8u1) starting as process 6358 ...
151205 16:52:01 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
151205 16:52:01 [Note] Plugin 'FEDERATED' is disabled.
151205 16:52:01 InnoDB: The InnoDB memory heap is disabled
151205 16:52:01 InnoDB: Mutexes and rw_locks use GCC atomic builtins
151205 16:52:01 InnoDB: Compressed tables use zlib 1.2.8
151205 16:52:01 InnoDB: Using Linux native AIO
151205 16:52:02 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
151205 16:52:02 InnoDB: Completed initialization of buffer pool
151205 16:52:02 InnoDB: Fatal error: cannot allocate memory for the buffer pool
151205 16:52:02 [ERROR] Plugin 'InnoDB' init function returned error.
151205 16:52:02 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
151205 16:52:02 [ERROR] Unknown/unsupported storage engine: InnoDB
151205 16:52:02 [ERROR] Aborting
151205 16:52:02 [Note] /usr/sbin/mysqld: Shutdown complete
Bon, j'avoue que si quelqu'un me sort une solution de ces lignes, je serais très heureux.
Mais pour ne pas qu'on m'insulte, je vais essayer de décomposer un peu pour essayer de trouver d'où vient l'erreur.
La première ligne qui me choque le plus est la suivante:
151205 16:52:01 InnoDB: The InnoDB memory heap is disabled
D'après Wikipedia, InnoDB est un autre moteur SQL, alors pourquoi ai-je des erreurs de ce type?
EDIT:
Cette ligne m'interpelle également:
151205 16:52:02 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
On voit qu'il essaye de mettre plus de bytes qu'il n'y a de place. Cependant, où puis-je changer la valeur de 128.0M? Je suis allé voir dans le fichier /etc/php5/apache2/php.ini
et la valeur est à 256 donc je ne sais pas trop où je pourrais changer la valeur.. C'est peut-être ça qui ne va pas?
https://stackoverflow.com/questions/12114746/mysqld-service-stops-once-a-day-on-ec2-server suit ce lien pour voir si tu trouve quelque chose; voilà déjà un élément que j'ai trouvé dans les commentaires
/etc/my.cnf
innodb_buffer_pool_size = 1M
pour ce pb -> InnoDB: The InnoDB memory heap is disabled ; as tu essayé de créer une swap?
Bonjour, merci pour vos réponses rapides!
@coolbreeze, j'ai regardé ton lien, j'avoue ne pas tout comprendre, mais d'après ce que je comprends, ils proposent de baisser la valeur de inno_db_buffer_pool_size à une valeur plus basse, (60-80% de toute la mémoire disponible). Déjà, je n'ai aucune valeur inno_db_buffer_pool_size encore dans mon my.cnf, est-ce que je dois la rajouter manuellement?
Comment se fait-il que la mémoire arrive au bout d'un certain temps à saturation? Est-ce qu'il y a des choses qui restent enregistrées en mémoire une fois que les requêtes sont faites? Ne serait-il pas judicieux de vider cette mémoire toutes les x minutes?
Du coup, je ne sais toujours pas où est-ce que le log va chercher la valeur 128 à cette ligne:
151205 16:52:02 InnoDB: Initializing buffer pool, size = 128.0M
EDIT: Non je n'ai pas essayé de créer une swap, je ne sais pas du tout ce que c'est, je vais me renseigner.. En quoi cela pourrait-il m'aider?
Bonjour,
Dans le fichier de config my.ini ajoute/modifie cette ligne :
innodb_buffer_pool_size=256M
tu peux également augmenter cette valeur suivant la RAM disponible sur ton serveur, si tu es en mutualisé, ça va être plus compliqué :)
@Xanadoo , la réponse est déja donnée par @coolbreeze
et il est sous débian donc on oublie my.ini
Re à tous,
encore merci pour vos réponses, je pense qu'on avance :)
Je me suis renseigné sur ce qu'était le innodb buffer pool
Donc a priori ça a l'air pas mal vu que ça met en cache certaines données. J'ai étudié un petit peu la mémoire de mon serveur en lançant la commande cat /proc/meminfo
et voici les trois premières lignes qui sont les plus importantes à mes yeux:
MemTotal: 2039824 kB
MemFree: 324936 kB
MemAvailable: 1574672 kB
Donc si je comprends bien, mon serveur a 2GB de RAM. Après, je ne comprends pas trop la différence entre MemFree
et MemAvailable
.
D'ailleurs, je me demande ce qui pourrait bien utiliser 1.6GB de RAM sur un serveur web... Mais passons...
Du coup, je suis bien tenté de passer la valeur de innodb_buffer_pool
à 256, pensez-vous que c'est une bonne solution? Si oui, dois-je ajouter une ligne dans le fichier /etc/mysql/my.cnf
même si la ligne n'existe toujours pas? Ne devrais-je pas chercher un autre endroit où cette valeur pourrait être configurée?
Et enfin, pensez-vous qu'il est peut-être nécessaire d'upgrader mon VPS pour avoir plus de mémoire disponible?
Je vous remercie de vos réponses encore une fois :)
La mémoire Free est la mémoire inutilisée même pas par les caches ni les buffers, tandis que la mémoire available c'est la mémoire que l'on peut prendre sur la mémoire Free et aussi sur les caches qu'on peut libérer. Les Système Unix utilisent toute la mémoire libre en cache mais peuvent la rendre si nécessaire.
Si tu as un phpMyadmin tu peux lire et modifier toutes les variables (en root) la valeur 128M est la valeur par défaut.
Tu peux créer la variable mais mettre une valeur plus grande ne va pas résoudre ton pb. Il y a surement un process qui consomme trop.
est-ce que le pb survient au reboot ou seulement lorsque tu restart Mysql ?
fais un top pour voir les process qui consomment le plus