Solution 1 :
Nous savons que le problème de mémoire vient d'Apache/PHP car chaque fois que nous émettons un rechargement /etc/init.d/httpd, l'utilisation de la mémoire diminue
Non, cela signifie simplement qu'il est lié au trafic Web. Vous avez poursuivi en mentionnant que vous exécutez mysql sur la boîte - probablement la gestion des données pour le serveur Web - cela pourrait tout aussi bien être le coupable ici. De même que d'autres services que votre pile Web utilise et que vous n'avez pas mentionnés.
Chaque thread apache se voit attribuer une limite de mémoire PHP de 512 Mo, ce qui explique
Non, ce n'est pas le cas. Vous signalez une moyenne de 7 serveurs et un maximum de 25 serveurs occupés. Pourtant, votre graphique de mémoire affiche un delta d'environ 25 Go.
Vous devriez vraiment recommencer avec le réglage HTTP de base - vous semblez exécuter un nombre constant de 256 httpds, mais votre utilisation maximale est de 25 - c'est tout simplement stupide.
et un max_execution_time de 120 sec qui devrait terminer les threads dont l'exécution prend plus de temps
Non - seulement si le thread d'exécution est dans l'interpréteur PHP - pas si PHP est bloqué.
qui effectue la modélisation financière
(soupir)
Cela aurait été utile si vous aviez fourni des détails sur la façon dont vous avez configuré Apache, threadé ou prefork, quelle version, comment PHP est invoqué (module, cgi, fastcgi), si vous utilisez des connexions persistantes, si vous utilisez des procédures stockées.
Je vous suggère de commencer par déplacer mysql sur une machine séparée et d'arrêter d'utiliser des connexions persistantes (si vous les utilisez actuellement). Définissez la limite de mémoire beaucoup inférieur et remplacez-le sur une base par script. Assurez-vous que le ramasse-miettes de référence circulaire est installé et configuré.
Solution 2 :
Vous avez probablement résolu votre problème maintenant. En guise d'intérim, pour empêcher le serveur de s'échanger / de s'écraser, j'exécute la commande suivante toutes les heures à partir de cron :
#!/bin/sh
sync; echo 3 > /proc/sys/vm/drop_caches
Je ne dis pas que c'est une solution, juste un moyen de faire fonctionner les choses et de minimiser les temps d'arrêt lorsque vous recherchez la cause réelle de la fuite de mémoire.
Plus de détails ici.
http://www.tecmint.com/clear-ram-memory-cache-buffer-and-swap-space-on-linux/