1

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 :)

Jorge Bernal
  • 454
  • 1
  • 3
  • 9

3 Answers3

1

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
drAlberT
  • 10,949
  • 7
  • 39
  • 52
  • 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 Sep 18 '09 at 14:46
  • Only see the segmentation fault and xdebug is not leaving anything useful in /tmp/xdebug – Jorge Bernal Sep 18 '09 at 15:45
  • 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. – drAlberT Sep 18 '09 at 15:50
  • If you leave that as is for a couple of weeks it will full your hard drive. – sglessard Apr 27 '20 at 23:02
  • It looks like you forgot them as is for 11 years, not weeks – drAlberT Apr 28 '20 at 06:25
1

Finally solved by adding to /etc/apache2/envvars:

export USE_ZEND_ALLOC=0
Jorge Bernal
  • 454
  • 1
  • 3
  • 9
0

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.

Tom O'Connor
  • 27,480
  • 10
  • 73
  • 148