You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
During a performance test I managed to get pen-0.29.0 stuck in an infinite loop consuming 100% CPU. The process seems stuck in mainloop() and isn't accepting new connections, nor does it respond to penctl commands via the control socket. The behavior persists even after the load generator tool (gatling) is shut down. I'd be most happy to assist with trouble shooting or testing
The proxy was started in a Docker container like and SIGHUP'ed a few times to change the list of backends.
This was tricky to reproduce because it only triggers when a connection to a backend server times out and then only sometimes.
The culprit is this code in pending_and_closing:
if (pending_list != -1) {
p = start = pending_list;
do {
int conn = dlist_value(p);
if (conns[conn].state == CS_IN_PROGRESS) {
check_if_timeout(conn);
}
p = dlist_next(p);
} while (p != start);
}
A loop over a linked list of pending connections to see if they are connected yet. The bug is that check_if_timeout is called from the loop; if the connection has timed out, check_if_timeout calls failover_server; if there is no server to fail over to, failover_server calls close_conn; close_conn modifies the list we're looping over; if the `start´ node happens to be removed by close_conn, the loop never ends.
The fix, now in git, is to not modify the list while looping over it.
During a performance test I managed to get pen-0.29.0 stuck in an infinite loop consuming 100% CPU. The process seems stuck in mainloop() and isn't accepting new connections, nor does it respond to penctl commands via the control socket. The behavior persists even after the load generator tool (gatling) is shut down. I'd be most happy to assist with trouble shooting or testing
The proxy was started in a Docker container like and SIGHUP'ed a few times to change the list of backends.
This is the contents of the config file
I used gdb generate-core-dump to create a dump of the process
Pen was installed from this Fedora 23 x86_64 package
The Gatling scenario uses 200 concurrent clients, and is attached at
An easy way to hop into a gdb with debug symbols is e.g.
The text was updated successfully, but these errors were encountered: