On Tue, Apr 14, 2009 at 03:56:28PM +0200, Radek Hladik wrote:
When running from command line everything seems to work fine. This is of
course singlethreaded and potential resource leaks need not to cause a
problem. However when running from webserver, the result is much more
interesting. When connecting to qemu:///system (via local socket) using
<?
libvirt_connect($uri,true);
?>
I can crash the libvirt daemon after cca 10 page reloads - sometimes
with message
Apr 13 15:32:44 kvmtest kernel: libvirtd[8263]: segfault at 4 ip
00000039d7223fc0 sp 00007fa6fbc29a88 error 6 in
libdbus-1.so.3.4.0[39d7200000+3c000]
in system log, sometimes without any message.
Crashing the libvirtd daemon is not your fault ! It is supposed to be
completely robust against whatever bad stuff the client may throw at
it. So even if the client has a bug, then it shouldn't crash the daemon.
If possible it'd be helpful if you can get a stack trace from the daemon.
You can do this by stopping the demon '/etc/init.d/libvirtd stop' and
then running it under GDB directly
'gdb /usr/sbin/libvirtd'
make sure you have libvirt-debuginfo RPM installed if using Fedora, or
have built with '-g' debug option if built manually.
When connecting to qemu+tcp:///system using credentials (explained
later):
<?
libvirt_connect($uri,true,Array(VIR_CRED_AUTHNAME=>"fred",VIR_CRED_PASSPHRASE=>"fred"));
?>
It works but httpd processes open a lot pipes and after a few hours with
page refreshing every 10 sec I even ran into error:
[Mon Apr 13 02:40:26 2009] [error] [client 10.38.25.152] PHP Warning:
libvirt_connect() unable to make pipe: Too many open files
This is interesting. It suggests that the virConnectPtr object you
have created is not being relased. Each object will require at least
2 file descriptors, so if they're not released, then either the
libvirtd daemon, or the PHP client, or the OS as a whole will run
out of file descriptors and start showing this error message.
And if you are still reading then I can point you to
http://phplibvirt.cybersales.cz/ where you can download the source code
and browse the documentation - you can find there list of implemented
functions and brief instructions how to install the extension. But be
warned it really can crash your libvirt and maybe apache! For
completeness: I use Fedora 10 with some rawhide updates:
httpd-2.2.11-6.x86_64
php-5.2.9-1.fc11.x86_64
php-devel-5.2.9-1.fc11.x86_64
libvirt-0.6.0-2.fc11.x86_64
qemu-0.9.1-12.fc11.x86_64
libvirt-devel-0.6.0-2.fc11.x86_64
I'd recommend updating to the latest libvirt 0.6.2 release that should be
available in rawhide now. It fixed quite a few crashes & leaks, which
you may be unlucky enough to be hitting
Regards,
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|