Hi guys,
I have been trying to diagnose a memcached segmentation fault. It is
running on a 32 bit Linux 2.6.20 build (Gentoo). The memcached server
is being connected through the standard PHP (5.2.6 module to Apache 2)
client. After a few reloads of the provided script, the server will
crash (increasing the data size seems to accelerate it).
The server is started as follows:
/usr/bin/memcached -l localhost -vvv
It will crash with the following dumped to the terminal:
...
<30 new auto-negotiating client connection
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
30: going from conn_read to conn_parse_cmd
30: Client using the ascii protocol
<30 set test 0 10 50526
30: going from conn_parse_cmd to conn_nread
> FOUND KEY test
>30 STORED
30: going from conn_nread to conn_write
30: going from conn_write to conn_new_cmd
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
30: going from conn_read to conn_closing
<30 connection closed.
<30 new auto-negotiating client connection
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
30: going from conn_read to conn_parse_cmd
30: Client using the ascii protocol
<30 get test
> FOUND KEY test
>30 sending key test
>30 END
30: going from conn_parse_cmd to conn_mwrite
30: going from conn_mwrite to conn_new_cmd
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
30: going from conn_read to conn_closing
<30 connection closed.
<30 new auto-negotiating client connection
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
30: going from conn_read to conn_parse_cmd
30: Client using the ascii protocol
<30 set test 0 10 50526
30: going from conn_parse_cmd to conn_nread
> FOUND KEY test
>30 STORED
30: going from conn_nread to conn_write
30: going from conn_write to conn_new_cmd
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
<31 new auto-negotiating client connection
31: going from conn_new_cmd to conn_waiting
31: going from conn_waiting to conn_read
31: going from conn_read to conn_parse_cmd
31: Client using the ascii protocol
<31 get test
> FOUND KEY test
>31 sending key test
>31 END
31: going from conn_parse_cmd to conn_mwrite
Segmentation fault
The PHP code used to produce this is:
<?php
function _memcache_test($k, $d)
{
echo "memcache_connect\n";
$mc = memcache_connect('localhost', 11211, 3);
echo "memcache_set\n";
memcache_set($mc, $k, $d, 0, 10);
echo "memcache_close\n";
memcache_close($mc);
echo "memcache_connect\n";
$mc = memcache_connect('localhost', 11211, 3);
echo "memcache_get\n";
$t = memcache_get($mc, $k);
echo 'strlen(t): ', strlen($t), "\n";
echo "memcache_close\n";
memcache_close($mc);
}
echo '<pre>';
$sz = 50526;
$s = str_pad('', $sz, '0');
echo 'strlen(s): ', strlen($s), "\n";
_memcache_test('test', $s);
?>
Has anyone else seen anything like this?
Thanks,
thom