[ 
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]

Reply via email to