pendconn_grab_from_px() was called when a server was brought back up, to get some streams waiting in the proxy's queue and get them to run on the newly available server. It is very similar to process_srv_queue(), except it only goes through the proxy's queue, which can be a problem, because there is a small race condition that could lead us to add more streams to the server queue just as it's going down. If that happens, the server would just be ignored when back up by new streams, as its queue is not empty, and it would never try to process its queue. The other problem with pendconn_grab_from_px() is that it is very liberal with how it dequeues streams, and it is not very good at enforcing maxconn, it could lead to having 3*maxconn connections. For both those reasons, just get rid of pendconn_grab_from_px(), and just use process_srv_queue(). Both problems are easy to reproduce, especially on a 64 threads machine, set a maxconn to 100, inject in H2 with 1000 concurrent connections containing up to 100 streams each, and after a few seconds/minutes the max number of concurrent output streams will be much higher than maxconn, and eventually the server will stop processing connections. It may be related to github issue #2744. Note that it doesn't totally fix the problem, we can occasionally see a few more connections than maxconn, but the max that have been observed is 4 more connections, we no longer get multiple times maxconn. have more outgoing connections than maxconn, This should be backported up to 2.6.
HAProxy
HAProxy is a free, very fast and reliable reverse-proxy offering high availability, load balancing, and proxying for TCP and HTTP-based applications.
Installation
The INSTALL file describes how to build HAProxy. A list of packages is also available on the wiki.
Getting help
The discourse and the mailing-list are available for questions or configuration assistance. You can also use the slack or IRC channel. Please don't use the issue tracker for these.
The issue tracker is only for bug reports or feature requests.
Documentation
The HAProxy documentation has been split into a number of different files for ease of use. It is available in text format as well as HTML. The wiki is also meant to replace the old architecture guide.
Please refer to the following files depending on what you're looking for:
- INSTALL for instructions on how to build and install HAProxy
- BRANCHES to understand the project's life cycle and what version to use
- LICENSE for the project's license
- CONTRIBUTING for the process to follow to submit contributions
The more detailed documentation is located into the doc/ directory:
- doc/intro.txt for a quick introduction on HAProxy
- doc/configuration.txt for the configuration's reference manual
- doc/lua.txt for the Lua's reference manual
- doc/SPOE.txt for how to use the SPOE engine
- doc/network-namespaces.txt for how to use network namespaces under Linux
- doc/management.txt for the management guide
- doc/regression-testing.txt for how to use the regression testing suite
- doc/peers.txt for the peers protocol reference
- doc/coding-style.txt for how to adopt HAProxy's coding style
- doc/internals for developer-specific documentation (not all up to date)
License
HAProxy is licensed under GPL 2 or any later version, the headers under LGPL 2.1. See the LICENSE file for a more detailed explanation.
