SIGSEGV et error_log

Ed0
Petit nouveau ! | 2 Messages

30 mai 2014, 00:23

Bonjour,

Ce n'est pas vraiment un problème, mais j'aimerais bien comprendre.

J'ai un script qui effectue des opérations sur une base de données tournant en boucle (c'est voulu). Il exécute les opérations puis sleep() le reste du temps pour se lancer toutes les minutes.

Il se trouve que dans ce script, je loggais des erreurs et des infos de debug via error_log vers le fichier d'erreur de nginx (nginx + php-fpm). Le problème est que : rien ne s'écrit dans le fichier de log (à la limite c'est pas très grave), bien que d'autres scripts arrivent à écrire sur le fichier de log, mais surtout que périodiquement j'avais des erreurs de segmentation fault (SIGSEGV) qui faisaient redémarrer le child. Après avoir fait des traces xdebug j'en suis arrivé à la conclusion que c'est error_log() qui provoquait ces SIGSEGV (c'était la dernière fonction appelée avant le crash). Après avoir commenté tous les error_log(), plus de problème.

Ce que je suppose c'est qu'il y a un buffer qui garde tous les messages que j'envoie à error_log qui se vide en écrivant sur le fichier lorsque le script s'arrête. Dans mon cas le script ne s'arrête pas ce qui cause l'erreur et le fait que les messages ne s'écrivent pas dans le fichier. Ai-je raison ? Ou bien cela vient d'autre part ?

Ed0

Mammouth du PHP | 2278 Messages

30 mai 2014, 07:57

Je ne suis pas sûr que ça aide, mais:
j'ai cette erreur par exemple quand je programme un while qui ne se termine pas du genre:

Code : Tout sélectionner

while (condition qui ne se termine pas) { variable = variable.suite }
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Ed0
Petit nouveau ! | 2 Messages

30 mai 2014, 09:13

Salut,

Dans mon cas, le while peut s'arrêter avec un stop file, xdebug me donne des utilisations mémoires autour de 2MB bien loin des 128MB max. Donc je ne pense pas que ce soit une allocation de variable qui boufferait toute la mémoire.

Ed0

Mammouth du PHP | 2278 Messages

30 mai 2014, 19:55

Je pense que la segmentation est distincte de l'occupation; problème hyper connu en C avec les pointeurs en particulier. Or PHp est écrit en C ou C++.*cf wikipedia pour erreur segmentation.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD