[
https://issues.apache.org/jira/browse/PROTON-1791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16399365#comment-16399365
]
Alan Conway commented on PROTON-1791:
-------------------------------------
It is interesting that the workaround works, but it is an accident and may not
be reliable. In the recent rework of the ruby IO code, heartbeats and scheduled
tasks did not get finished. If something is waking up the select loop often
enough, then the heartbeat frames will be sent - but there's nothing in the
library waking it up on purpose. The fact that this workaround works may mean
there is excessive activity on the container's wake pipe, which I will also
investigate.
As far as workarounds - any regular activity will do, you can run a keepalive
thread to poke the connection. You can use c.idle_timeout to find out what the
remote end has requested. You don't need to send a message, probably better to
do something with minimal side-effects, maybe open and close a dummy session.
I'm working on this now, should have a proper fix soon...
> TCP sockets remain open in CLOSE_WAIT state
> -------------------------------------------
>
> Key: PROTON-1791
> URL: https://issues.apache.org/jira/browse/PROTON-1791
> Project: Qpid Proton
> Issue Type: Bug
> Components: ruby-binding
> Affects Versions: proton-c-0.21.0
> Environment: Confirmed on Ubuntu 16.04 and RHEL 7.4
> Confirmed on qpid_proton 0.19.0 and 0.21.0
> Reporter: Miha Plesko
> Assignee: Alan Conway
> Priority: Major
> Labels: bug
> Fix For: proton-c-0.22.0
>
> Attachments: idle-disconnect.png
>
>
> Hi guys,
> thanks for developing the awesome qpid_proton ruby gem, we're using it on
> daily basis!
> However, recently we noticed following error in our server log:
> Too many open files - socket(2) for "172.16.117.189" port 5672
> After some research it turns out that qpid_proton process is having
> increasingly
> more and more following file descriptors open:
> $ lsof -ap 108533
> ruby 108533 miha 116u IPv4 562438 0t0 TCP
> 172.16.117.189:53626->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 197u IPv4 561644 0t0 TCP
> 172.16.117.189:53630->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 311u IPv4 560657 0t0 TCP
> 172.16.117.189:53634->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 549u IPv4 565342 0t0 TCP
> 172.16.117.189:53642->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 576u IPv4 565122 0t0 TCP
> 172.16.117.189:53650->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 603u IPv4 565738 0t0 TCP
> 172.16.117.189:53654->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 630u IPv4 563021 0t0 TCP
> 172.16.117.189:53658->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 657u IPv4 568361 0t0 TCP
> 172.16.117.189:53662->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 666u IPv4 563027 0t0 TCP
> 172.16.117.189:53666->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 675u IPv4 567538 0t0 TCP
> 172.16.117.189:53670->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 684u IPv4 567998 0t0 TCP
> 172.16.117.189:53678->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 690u IPv4 574709 0t0 TCP
> 172.16.117.189:53686->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 693u IPv4 578725 0t0 TCP
> 172.16.117.189:53694->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 696u IPv4 576840 0t0 TCP
> 172.16.117.189:53698->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 699u IPv4 577819 0t0 TCP
> 172.16.117.189:53702->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 702u IPv4 582192 0t0 TCP
> 172.16.117.189:53710->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 705u IPv4 582861 0t0 TCP
> 172.16.117.189:53714->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 708u IPv4 577363 0t0 TCP
> 172.16.117.189:53718->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 711u IPv4 578175 0t0 TCP
> 172.16.117.189:53722->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 714u IPv4 587172 0t0 TCP
> 172.16.117.189:53730->147.75.102.132:amqp (CLOSE_WAIT)
> ruby 108533 miha 717u IPv4 584387 0t0 TCP
> 172.16.117.189:53734->147.75.102.132:amqp (CLOSE_WAIT)
> ...
> I think the CLOSE_WAIT status of file descriptor indicates that the TCP
> connection has already been closed, but the file descriptor wasn't closed.
> After 9 hours or so there are enough of such file descriptors for OS to
> complain about it.
> We did all we could to close connections gracefully:
> connection.container.stop
> connection.close
> connection = nil
> but nothing seems to help. A simple but expensive workaround is to manually
> invoke Ruby's garbage collection,
> but ideally `connection.close` would close the file descriptor.
> May I kindly ask you to look at this?
> Thank you and Best Regards,
> Miha
> PS: The error occurs both on Ubuntu 16.04 and RHEL 7.4
> PS2: The error occurs both on qpid_proton 0.19.0 and 0.21.0
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]