Sunday, January 16, 2011

Apache gives empty reply

It happens randomly, and only on moodle installations. Apache don't add a line in the logs when this happens, and I don't know where to look.

koke@escher:~/Code/eboxhq/moodle[master]$ curl -I http://training.ebox-technologies.com/login/signup.php?course=WNA001 
curl: (52) Empty reply from server
koke@escher:~/Code/eboxhq/moodle[master]$ curl -I http://training.ebox-technologies.com/login/signup.php?course=WNA001 
HTTP/1.1 200 OK

The apache conf is quite straightforward and works perfectly in the other vhosts

<VirtualHost *:80>
    ServerAdmin webmaster@ebox-technologies.com
    DocumentRoot /srv/apache/training.ebox-technologies.com/htdocs
    ServerName training.eboxhq.com
    ErrorLog /var/log/apache2/training.ebox-technologies.com-error.log
    CustomLog /var/log/apache2/training.ebox-technologies.com-access.log combined

        <FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
                ExpiresActive On
                ExpiresDefault "access plus 1 week"
                Header add Cache-Control public
        </FilesMatch>
</VirtualHost>

Using apache 2.2.9 php 5.2.6 and moodle 1.9.5+ (Build: 20090722)

Any ideas welcome :)

  • Is there nothing in error_log either?

    You could set MaxServers to 1, and then strace that apache thread while requesting the page. It could be that PHP is segfaulting, or the apache child is dying for other reasons.

    Also, tcpdump the request at both ends to see what data is being sent on the wire.

  • Look at the main server error log, it should have some Child Segfault Error (11).

    This is probably given by a PHP engine fault, often given by a buggy php module, unicode chars handling, gettext corrupted DB, and so on.

    It is very difficult to debug.

    You can enable xdebug tracing and look at what line it is segfaulting:

    pecl install xdebug
    

    php.ini:

    [xdebug]
    xdebug.profiler_enable=1
    xdebug.profiler_output_dir="/tmp/xdebug"
    xdebug.auto_trace=1            ; enable tracing
    xdebug.trace_format=0
    xdebug.show_mem_delta=1        ; memory difference
    xdebug.show_local_vars=1
    xdebug.max_nesting_level=100
    
    Jorge Bernal : Found this on error log: zend_mm_heap corrupted [Fri Sep 18 16:47:08 2009] [notice] child pid 7361 exit signal Segmentation fault (11) [Fri Sep 18 16:47:09 2009] [notice] child pid 7368 exit signal Segmentation fault (11) [Fri Sep 18 16:47:10 2009] [notice] child pid 7375 exit signal Segmentation fault (11) Will try xdebug and see if it helps
    Jorge Bernal : Only see the segmentation fault and xdebug is not leaving anything useful in /tmp/xdebug
    AlberT : it should print a trace of _every_ php function called. So when the trace stops is when the segfault happened. This should suffice to argue what php function is faulting.
    From AlberT
  • Finally solved by adding to /etc/apache2/envvars:

    export USE_ZEND_ALLOC=0
    
  • Finally solved by adding to /etc/apache2/envvars:

    export USE_ZEND_ALLOC=0

    followe dur steps... Now my webmail works again!

    thanks!

    From dave yazz

0 comments:

Post a Comment