I think it may be due to
https://github.com/apache/trafficserver/blob/master/plugins/lua/ts_lua.c#L456-L466

I believe we do have ways to handle this better now in 9.x so we just
need to fix the plugin.

Let me take a look at it in the next 2 weeks and you can create an
issue to track it on github as well

Thanks.

Kit

On Mon, Mar 14, 2022 at 10:36 AM CHOU, PETER <pc6...@att.com> wrote:
>
> Sorry, in the test script the line --
>
> local t = {}
>
> should be at the top of the script (file scope) not within the __init__() 
> function.
>
> I was testing the behavior, of course function local variable is garbage 
> collected :-).
>
> However, file local or global are not.
>
> So correct script --
>
> local t = {}
>
> function __init__(args)
>
>   ts.debug("Running __init__()...")
>
>   local count = 0
>   t[0] = "TEST"
>
>   local FH = io.open("/dev/urandom", "rb")
>
>   if args[1] == nil then
>     print("Agument required. Usage " .. args[0] .. " <MB>")
>     return -1
>   end
>
>   for i = 1, args[1], 1 do
>      t[i] = FH:read(1024000)
>      count = count + string.len(t[1])
>   end
>
>   io.close(FH)
>
>   ts.error("__init__ : t[0] = " .. t[0])
>   ts.error("Total bytes allocated = " .. count .. " bytes")
>   ts.error("Garbage Collector reports = " ..
>                 collectgarbage("count") .. " MB")
>
> end
>
> function do_remap()
>
>    ts.debug("Running do_remap()...")
> end
>
> -----Original Message-----
> From: CHOU, PETER
> Sent: Monday, March 14, 2022 10:29 AM
> To: dev@trafficserver.apache.org; us...@trafficserver.apache.org
> Subject: RE: Question on Lua plugin differences between ATS 7.1.x and ATS 9.x.
>
> Kit,
>
> This is regarding Lua plugin remap instances. With our production 
> configuration and build, we are leaking almost 1GB of memory on each remap 
> config reload. This is being verified in two ways --
>
> First is overall process memory usage:
>
> ps -o pid,comm,vsz -p <traffic_server_pid>
>
> Second is the remap reload will fail due to out of memory after 2GB memory 
> usage is exceeded when using the Ubuntu distribution default LuaJIT which is 
> limited to 2GB maximum. With latest LuaJIT which allows more memory you can 
> keep going until process is killed by OOM manager.
>
> For lab testing, non production code, I use a test lua script with the 
> following --
>
> collectgarbage("count")
>
> My test remap line --
>
> map http://localhost/0 http://localhost/ @plugin=tslua.so @pparam=--states=1 
> @pparam=/home/pebc/test.lua @pparam=100
>
> My test script --
>
> function __init__(args)
>
>   ts.debug("Running __init__()...")
>
>   local count = 0
>   local t = {}
>   t[0] = "TEST"
>
>   local FH = io.open("/dev/urandom", "rb")
>
>   if args[1] == nil then
>     print("Agument required. Usage " .. args[0] .. " <MB>")
>     return -1
>   end
>
>   for i = 1, args[1], 1 do
>      t[i] = FH:read(1024000)
>      count = count + string.len(t[1])
>   end
>
>   io.close(FH)
>
>   ts.error("__init__ : t[0] = " .. t[0])
>   ts.error("Total bytes allocated = " .. count .. " bytes")
>   ts.error("Garbage Collector reports = " ..
>                 collectgarbage("count") .. " MB")
>
> end
>
> function do_remap()
>
>    ts.debug("Running do_remap()...")
> end
>
> Thanks,
> Peter
>
> -----Original Message-----
> From: Shu Kit Chan <chanshu...@gmail.com>
> Sent: Saturday, March 12, 2022 9:15 AM
> To: us...@trafficserver.apache.org
> Cc: dev@trafficserver.apache.org
> Subject: Re: Question on Lua plugin differences between ATS 7.1.x and ATS 9.x.
>
> Is this a lua script you in plugin.config or remap.config ?
>
> Also what method do you use to see if gc is happening or not ?
>
> On Fri, Mar 11, 2022 at 1:22 PM CHOU, PETER <pc6...@att.com> wrote:
> >
> > Hi,
> >
> >
> >
> > We have quite a few Lua scripts that were written for use with ATS 7.1.4 
> > and earlier. We are looking to migrate to ATS 9.1.1, but it seems like the 
> > garbage collection that is supposed to happen during a “traffic_ctl config 
> > reload” (reload a remap configuration file containing remap lines using the 
> > Lua plugin) does not seem to be happening.
> >
> >
> >
> > Back in 2016, my colleague submitted a PR (commit 7e52a) which called the 
> > LuaJIT garbage collector during the remap instance new and delete 
> > operations within the Lua plugin.
> >
> >
> >
> > I noticed that in 2020 these garbage collector calls were removed by 
> > another PR (commit 36a8cd). However, this does not seem to be the cause of 
> > the issue since the garbage collection still does not happen even if I 
> > revert this commit in my local tree.
> >
> >
> >
> > Our Lua scripts are using the following form –
> >
> >
> >
> > local <variables> [ I believe this are file scope local variables when
> > declared this way. ]
> >
> > …
> >
> > function a()
> >
> > function b()
> >
> > …
> >
> >
> >
> > We do *not* use any __clean__ functions (and have not had to in the past).
> >
> >
> >
> > I have tested with both 9.1.1 and 9.2.x.
> >
> > I have tested with both Ubuntu 20.04 LTS default LuaJIT (allows 2GB in 
> > Linux) and latest LuaJIT (removes 2GB limit). Both show version 
> > v2.1.0-beta3.
> >
> >
> >
> > So is this change by design, or is it an issue?
> >
> >
> >
> > Thanks,
> >
> > Peter Chou
> >
> >

Reply via email to