Hi Thierry, On Thu, Jan 09, 2020 at 10:34:35AM +0100, Thierry Fournier wrote: > I'm remember: the execution of the GC were the only way to close TCP > connexions > because in some cases the object provided by core.tcp() is not closed and the > connexion is not released. Without the GC execution, HAProxy reach the maximum > of available connexion, and the process were blocked. The flag forcing the GCC > is set only is we use a socket.
Ah OK then it makes sense, thanks for the explanation. However I'm seeing that the GC is forced for every yield/resume call, and not just on destroy. Maybe it could be acceptable not to call it on resume ? Sada, would you be interested in checking if this solves most of the performance issue: diff --git a/src/hlua.c b/src/hlua.c index 37f7866874..e5257efb54 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -1195,7 +1195,7 @@ resume_execution: } /* This GC permits to destroy some object when a Lua timeout strikes. */ - if (lua->flags & HLUA_MUST_GC && + if (0 && lua->flags & HLUA_MUST_GC && ret != HLUA_E_AGAIN) lua_gc(lua->T, LUA_GCCOLLECT, 0); > Maybe we try to include new option "tune.lua.forced-gc". Based on your description if we need an option, I'd rather have the opposite, like "tune.lua.disable-gc" so that it remains enabled by default, and with an explanation that one must not disable it. Thanks, Willy