diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-12-05 01:33:41 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-12-05 01:33:41 +0000 |
commit | ee6ffca0a8d129dd930f4c63d0c4c9ef034b245f (patch) | |
tree | 39440e39247f194198ea12ddf4318c5d449cb4c2 /lib/unicorn/socket_helper.rb | |
parent | 27f666a973a59c8c6738a65b69f9060c41e6958c (diff) | |
download | unicorn-ee6ffca0a8d129dd930f4c63d0c4c9ef034b245f.tar.gz |
Even LANs can break or be unreliable sometimes and socket disconnect messages get lost, which means we fall back to the global (kill -9) timeout in Unicorn. While the default global timeout is much shorter (60s) than typical TCP timeouts, some HTTP application dispatches take much I/O or computational time (streaming many gigabytes), so the global timeout becomes ineffective. Under Linux, sysadmins are encouraged to lower the default net.ipv4.tcp_keepalive_* knobs in sysctl. There should be similar knobs in other operating systems (the default keepalive intervals are usually ridiculously high, too high for anything). When the listen socket has SO_KEEPALIVE set, the flag should be inherited by accept()-ed sockets.
Diffstat (limited to 'lib/unicorn/socket_helper.rb')
-rw-r--r-- | lib/unicorn/socket_helper.rb | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/unicorn/socket_helper.rb b/lib/unicorn/socket_helper.rb index 168a487..879ad6b 100644 --- a/lib/unicorn/socket_helper.rb +++ b/lib/unicorn/socket_helper.rb @@ -51,6 +51,10 @@ module Unicorn end def set_tcp_sockopt(sock, opt) + # just in case, even LANs can break sometimes. Linux sysadmins are + # can lower net.ipv4.tcp_keepalive_* sysctl knobs to very low values. + sock.setsockopt(SOL_SOCKET, SO_KEEPALIVE, 1) if defined?(SO_KEEPALIVE) + if defined?(TCP_NODELAY) val = opt[:tcp_nodelay] val = DEFAULTS[:tcp_nodelay] if nil == val |