On Tue, Feb 18, 2020 at 08:34:53PM +0100, Andrea Bolognani wrote:
[Dropped Peter from CC. Please don't CC individual developers
unless they've explicitly requested that you do so.]

On Mon, 2020-02-17 at 17:50 +0000, Richard W.M. Jones wrote:
Build libvirt from git (ccf7567329f).

Using the libvirt ‘run’ script, run something like
libguestfs-test-tool.  I think basically any command which runs a
guest will do.  NB These commands are all run as NON-root:

  killall libvirtd lt-libvirtd virtlogd lt-virtlogd
  ./build/run libguestfs-test-tool

Now there will be a lt-virtlogd process using 100% of CPU:

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
2572972 rjones    20   0   47880  16256  14516 R 100.0   0.1   0:19.27 lt-virt+

It's actually worse than that: not only virtlogd usese an
unwarranted amount of CPU, but it also keeps the log file for the
domain busy, thus preventing the same domain from being started
again:

 $ virsh start alpine
 Domain alpine started

 $ virsh destroy alpine
 Domain alpine destroyed

 $ virsh start alpine
 error: Failed to start domain alpine
 error: can't connect to virtlogd: Cannot open log file: 
'/var/log/libvirt/qemu/alpine.log': Device or resource busy

 $ sudo lsof | grep alpine.log
 virtlogd  146845                      root   16w      REG              253,0   
  35103   17195654 /var/log/libvirt/qemu/alpine.log
 $

Restarting virtlogd makes thing operational again:

 $ sudo systemctl restart virtlogd
 $ virsh start alpine
 Domain alpine started

 $

My guess is that virtlogd doesn't realize the QEMU process is gone,
and sits there spinning forever waiting for some output that will
never arrive.

Yeah, since the switch to GLib event loop, the virLogHandlerDomainLogFileEvent
which was supposed to clean that up is no longer called on hangup.

My naive fix:
https://www.redhat.com/archives/libvir-list/2020-February/msg00651.html

Jano

Attachment: signature.asc
Description: PGP signature

Reply via email to