Forum Linux.général prob serveur apache

Posté par  .
Étiquettes : aucune
0
8
avr.
2008

bonjour a tous,

voila ce que j'ai dans mes logs apache:



*** glibc detected *** /usr/sbin/httpd: double free or corruption (!prev): 0x0b3b0988 ***

*** glibc detected *** /usr/sbin/httpd: double free or corruption (!prev): 0x0b3b0988 ***

*** glibc detected *** /usr/sbin/httpd: double free or corruption (!prev): 0x0b3b0988 ***

[Sun Apr 06 04:02:09 2008] [warn] child process 10898 still did not exit, sending a SIGTERM

[Sun Apr 06 04:02:09 2008] [warn] child process 4620 still did not exit, sending a SIGTERM

[Sun Apr 06 04:02:09 2008] [warn] child process 5121 still did not exit, sending a SIGTERM

[Sun Apr 06 04:02:09 2008] [warn] child process 12932 still did not exit, sending a SIGTERM

...



savez vous ce que ça signifie ?
bon pour la petite histoire, j'ai un site qui devient inaccessible a certainnes heures. j'essais de voir d'ou cela peux venir. et je vois ça dans les error-log d'apache.
  • # Pointeur fou.

    Posté par  . Évalué à 5.

    C'est la libc standard qui se plaint parce que quelque chose (httpd) a essayé de faire un free() sur une zone qui n'est pas allouée. Ça évite les segfaults et permet de repérer plus facilement une fuite mémoire (enfin, au moins les distinguer des pointeurs fous ordinaires). Tu peux facilement reproduire le phénomène avec une ligne de C :

    int main (void) { free ((char *)0x12345); return 0; }

    Sur des programmes déjà compilés, cela se produit généralement lorsqu'un binaire se lie avec la mauvaise version d'une bibliothèque, spécialement lorsque des structures ont été modifiées et qu'elles ne font plus la même taille.

    Vois si tu n'as pas fait un upgrade un peu trop expérimental, ou si deux versions concurrentes d'une même lib ne cohabitent pas sur ton système (genre OpenClient vs FreeTDS).
    • [^] # Re: Pointeur fou.

      Posté par  . Évalué à 2.

      Addendum : le code ci-dessus plante quand même parce que l'adresse en question reste en dehors de l'espace du processus et déclenche l'exception avant que free() n'entre en action. Celui-ci est mieux :

      int main (void) { char a=1; free (&a); return 0; }

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.