We have a couple of production systems that were recently converted into virtual machines.
There is an application of ours that frequently accesses a MySQL database, and for each query it creates a connection, queries, and disconnects that connection.
It is not the appropriate way to query (I know), but we have constraints that we can't seem to get around. Anyway, the issue is this: while the machine was a physical host, the program ran fine. Once converted to a virtual machine, we noticed intermittent connection issues to the database.
There were, at one point, 24000+ socket connections in TIME_WAIT (on the physical host, the most I saw was 17000 – not good, but not causing problems).
I would like these connections to be reused, so that we don't see that connection problem, and so:
Questions:
Is it ok to set the value of tcp_tw_reuse to 1? What are the obvious dangers? Is there any reason I should never do it?
Also, is there any other way to get the system (RHEL/CentOS) to prevent so many connections from going into TIME_WAIT, or getting them to be reused?
Lastly, what would changing tcp_tw_recycle do, and would that help me?
In advance, thanks!
Best Answer
You can safely reduce the time down, but you may run into issues with inproperly closed connections on networks with packet loss or jitter. I wouldn't start tuning at 1 second, start at 15-30 and work your way down.
Also, you really need to fix your application.
RFC 1185 has a good explanation in section 3.2: