You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@trafficserver.apache.org by "Chou, Peter" <pb...@labs.att.com> on 2019/06/19 18:58:59 UTC

Lua plugin memory limit on Linux.

Kit,

Did not hear back from you regarding the memory limit for the Lua plugin on Linux.

Previously, I had tested on the command line with the luajit executable, but I have completed some testing with the ATS master branch.

I am running with Ubuntu 18.04 LTS Server 64-bit which ships with 'LuaJIT 2.1.0-beta3'.

Using the following configuration, I got good results, able to allocated up to 2GB memory.

plugin.config -

tslua.so --states=1 test-memory.lua

test-memory.lua -

function __init__(argtb)
   count = 0
   t = {}
   max = 2000

   FH = io.open("/dev/urandom", "rb")

   for i = 1, max, 1 do
      t[i] = FH:read(1024000)
      count = count + string.len(t[1])
   end

   io.close(FH)

   ts.debug("Total bytes allocated = " .. count .. " bytes")
   ts.debug("Garbage Collector reports = " .. collectgarbage("count") .. " MB")
end

Result -

pebc@piplup2:~/opt/ats-gh-master/bin$ ./traffic_server -V
Traffic Server 9.0.0 Jun 18 2019 14:16:03 piplup2
traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
Apache Traffic Server - traffic_server - 9.0.0 - (build # 061814 on Jun 18 2019 at 14:16:03)
pebc@piplup2:~/opt/ats-gh-master/bin$ ./traffic_server
Traffic Server 9.0.0 Jun 18 2019 14:16:03 piplup2
traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
[Jun 19 11:54:42.681] traffic_server DIAG: (ts_lua) Total bytes allocated = 2048000000 bytes
[Jun 19 11:54:42.681] traffic_server DIAG: (ts_lua) Garbage Collector reports = 2001149.2382813 MB

Appreciate it if you could take a look and validate these results.

Thanks,
Peter

RE: Lua plugin memory limit on Linux.

Posted by "Chou, Peter" <pb...@labs.att.com>.
Kit,

Looks like the memory limit is lifted with the compiler flag indicated in the link.

I used the repository linked to from luajit.org -- http://luajit.org/git/luajit-2.0.git
rather than the one in the link (since it is official).

# Ubuntu 18.04 LTS Lua non-JIT -- tested to 3GB
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
Total bytes allocated = 3072000000 bytes
Garbage Collector reports = 3540307.8173828 MB

# LuaJit 2.1.0 beta 3 with LUAJIT_ENABLE_GC64 -- tested to 3GB
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
Total bytes allocated = 3072000000 bytes
Garbage Collector reports = 3001315.9365234 MB

# Ubuntu 18.04 LTS LuaJit no GC64 -- out of memory at 2GB
LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/
/usr/bin/luajit: not enough memory
Total bytes allocated = 2082816000 bytes
Garbage Collector reports = 2035123.3154297 MB

# ATS master with dev luajit with LUAJIT_ENABLE_GC64 -- tested to 4GB (global plugin mode, states = 1)
[Oct  8 15:37:56.176] traffic_server DIAG: (ts_lua) Total bytes allocated = 4094976000 bytes
[Oct  8 15:37:56.176] traffic_server DIAG: (ts_lua) Garbage Collector reports = 4000597.3740234 MB
[Oct  8 15:37:56.191] traffic_server DIAG: (ts_lua) Total bytes allocated = 4096000000 bytes
[Oct  8 15:37:56.191] traffic_server DIAG: (ts_lua) Garbage Collector reports = 4001597.53125 MB

# ATS master with Ubuntu luajit no GC64 -- out of memory at 2GB
[Oct  8 15:48:49.619] traffic_server DIAG: (ts_lua) Total bytes allocated = 2075648000 bytes
[Oct  8 15:48:49.619] traffic_server DIAG: (ts_lua) Garbage Collector reports = 2028155.7460938 MB

-----Original Message-----
From: Shu Kit Chan <ch...@gmail.com> 
Sent: Thursday, June 20, 2019 10:33 PM
To: dev <de...@trafficserver.apache.org>
Subject: Re: Lua plugin memory limit on Linux.

I caught up with some readings in the latest LuaJIT.
It looks like we can even do away with the 2GB limit.

https://urldefense.proofpoint.com/v2/url?u=https-3A__stackoverflow.com_questions_35155444_why-2Dis-2Dluajits-2Dmemory-2Dlimited-2Dto-2D1-2D2-2Dgb-2Don-2D64-2Dbit-2Dplatforms&d=DwIBaQ&c=LFYZ-o9_HUMeMTSQicvjIg&r=8c5kS62dKm3-obVyLvkwkc-kTTgV1vAsbxSPwL-yi3o&m=zEftzdzomErVFP0eMDQg_KyHI4MQqPL0bLT-P7zSG5Q&s=HD_iUwY4JuH3KveWNBiSbQ7RfyyTlgmAn1MtuOkdgs0&e=

Would be nice if you can try that out in your setup (basically apply a patch and re-build with LUAJIT_ENABLE_GC64) If it works, we should definitely document it.

Thanks.

Kit

On Thu, Jun 20, 2019 at 1:35 PM Chou, Peter <pb...@labs.att.com> wrote:
>
> Kit,
>
> This is the only error message seen from diags.log. It did not cause the ATS to core dump.
>
> [Jun 20 13:27:45.258] traffic_server NOTE: plugin.config loading ...
> [Jun 20 13:27:45.259] traffic_server NOTE: loading plugin '/home/pebc/opt/ats-gh-master/libexec/trafficserver/tslua.so'
> [Jun 20 13:28:14.337] traffic_server ERROR: [ts_lua_add_module] 
> lua_pcall 
> /home/pebc/opt/ats-gh-master/etc/trafficserver/test-memory.lua failed: 
> not enough memory [Jun 20 13:28:14.337] traffic_server ERROR: 
> [ts_lua][TSPluginInit] ts_lua_add_module failed [Jun 20 13:28:14.337] 
> traffic_server NOTE: plugin.config finished loading
>
> This is how much memory was allocated before the failure --
>
> [Jun 20 13:28:14.323] traffic_server DIAG: (ts_lua) Total bytes 
> allocated = 2071552000 bytes [Jun 20 13:28:14.323] traffic_server 
> DIAG: (ts_lua) Garbage Collector reports = 2024154.9023438 MB
>
> Modified the Lua script as follows --
>
> function __init__(argtb)
>    count = 0
>    t = {}
>    max = 2100
>
>    FH = io.open("/dev/urandom", "rb")
>
>    for i = 1, max, 1 do
>       t[i] = FH:read(1024000)
>       count = count + string.len(t[1])
>       if i > 2000 then
>          ts.debug("Total bytes allocated = " .. count .. " bytes")
>          ts.debug("Garbage Collector reports = " .. collectgarbage("count") .. " MB")
>       end
>    end
>
>    io.close(FH)
>
> end
>
> Thanks,
> Peter
>
> -----Original Message-----
> From: Shu Kit Chan <ch...@gmail.com>
> Sent: Wednesday, June 19, 2019 11:32 PM
> To: dev <de...@trafficserver.apache.org>
> Subject: Re: Lua plugin memory limit on Linux.
>
> Thanks for the info.
>
> That's good to know. Have you tried how much more you can allocate?
> And when you are over the limit, what is the message you are getting?
>
> Perhaps we can update the doc with this information.
>
> Kit
>
> On Wed, Jun 19, 2019 at 12:01 PM Chou, Peter <pb...@labs.att.com> wrote:
> >
> > Kit,
> >
> > Did not hear back from you regarding the memory limit for the Lua plugin on Linux.
> >
> > Previously, I had tested on the command line with the luajit executable, but I have completed some testing with the ATS master branch.
> >
> > I am running with Ubuntu 18.04 LTS Server 64-bit which ships with 'LuaJIT 2.1.0-beta3'.
> >
> > Using the following configuration, I got good results, able to allocated up to 2GB memory.
> >
> > plugin.config -
> >
> > tslua.so --states=1 test-memory.lua
> >
> > test-memory.lua -
> >
> > function __init__(argtb)
> >    count = 0
> >    t = {}
> >    max = 2000
> >
> >    FH = io.open("/dev/urandom", "rb")
> >
> >    for i = 1, max, 1 do
> >       t[i] = FH:read(1024000)
> >       count = count + string.len(t[1])
> >    end
> >
> >    io.close(FH)
> >
> >    ts.debug("Total bytes allocated = " .. count .. " bytes")
> >    ts.debug("Garbage Collector reports = " .. 
> > collectgarbage("count") .. " MB") end
> >
> > Result -
> >
> > pebc@piplup2:~/opt/ats-gh-master/bin$ ./traffic_server -V Traffic 
> > Server 9.0.0 Jun 18 2019 14:16:03 piplup2
> > traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
> > Apache Traffic Server - traffic_server - 9.0.0 - (build # 061814 on 
> > Jun 18 2019 at 14:16:03) pebc@piplup2:~/opt/ats-gh-master/bin$ 
> > ./traffic_server Traffic Server 9.0.0 Jun 18 2019 14:16:03 piplup2
> > traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
> > [Jun 19 11:54:42.681] traffic_server DIAG: (ts_lua) Total bytes 
> > allocated = 2048000000 bytes [Jun 19 11:54:42.681] traffic_server 
> > DIAG: (ts_lua) Garbage Collector reports = 2001149.2382813 MB
> >
> > Appreciate it if you could take a look and validate these results.
> >
> > Thanks,
> > Peter

Re: Lua plugin memory limit on Linux.

Posted by Shu Kit Chan <ch...@gmail.com>.
I caught up with some readings in the latest LuaJIT.
It looks like we can even do away with the 2GB limit.

https://stackoverflow.com/questions/35155444/why-is-luajits-memory-limited-to-1-2-gb-on-64-bit-platforms

Would be nice if you can try that out in your setup (basically apply a
patch and re-build with LUAJIT_ENABLE_GC64)
If it works, we should definitely document it.

Thanks.

Kit

On Thu, Jun 20, 2019 at 1:35 PM Chou, Peter <pb...@labs.att.com> wrote:
>
> Kit,
>
> This is the only error message seen from diags.log. It did not cause the ATS to core dump.
>
> [Jun 20 13:27:45.258] traffic_server NOTE: plugin.config loading ...
> [Jun 20 13:27:45.259] traffic_server NOTE: loading plugin '/home/pebc/opt/ats-gh-master/libexec/trafficserver/tslua.so'
> [Jun 20 13:28:14.337] traffic_server ERROR: [ts_lua_add_module] lua_pcall /home/pebc/opt/ats-gh-master/etc/trafficserver/test-memory.lua failed: not enough memory
> [Jun 20 13:28:14.337] traffic_server ERROR: [ts_lua][TSPluginInit] ts_lua_add_module failed
> [Jun 20 13:28:14.337] traffic_server NOTE: plugin.config finished loading
>
> This is how much memory was allocated before the failure --
>
> [Jun 20 13:28:14.323] traffic_server DIAG: (ts_lua) Total bytes allocated = 2071552000 bytes
> [Jun 20 13:28:14.323] traffic_server DIAG: (ts_lua) Garbage Collector reports = 2024154.9023438 MB
>
> Modified the Lua script as follows --
>
> function __init__(argtb)
>    count = 0
>    t = {}
>    max = 2100
>
>    FH = io.open("/dev/urandom", "rb")
>
>    for i = 1, max, 1 do
>       t[i] = FH:read(1024000)
>       count = count + string.len(t[1])
>       if i > 2000 then
>          ts.debug("Total bytes allocated = " .. count .. " bytes")
>          ts.debug("Garbage Collector reports = " .. collectgarbage("count") .. " MB")
>       end
>    end
>
>    io.close(FH)
>
> end
>
> Thanks,
> Peter
>
> -----Original Message-----
> From: Shu Kit Chan <ch...@gmail.com>
> Sent: Wednesday, June 19, 2019 11:32 PM
> To: dev <de...@trafficserver.apache.org>
> Subject: Re: Lua plugin memory limit on Linux.
>
> Thanks for the info.
>
> That's good to know. Have you tried how much more you can allocate?
> And when you are over the limit, what is the message you are getting?
>
> Perhaps we can update the doc with this information.
>
> Kit
>
> On Wed, Jun 19, 2019 at 12:01 PM Chou, Peter <pb...@labs.att.com> wrote:
> >
> > Kit,
> >
> > Did not hear back from you regarding the memory limit for the Lua plugin on Linux.
> >
> > Previously, I had tested on the command line with the luajit executable, but I have completed some testing with the ATS master branch.
> >
> > I am running with Ubuntu 18.04 LTS Server 64-bit which ships with 'LuaJIT 2.1.0-beta3'.
> >
> > Using the following configuration, I got good results, able to allocated up to 2GB memory.
> >
> > plugin.config -
> >
> > tslua.so --states=1 test-memory.lua
> >
> > test-memory.lua -
> >
> > function __init__(argtb)
> >    count = 0
> >    t = {}
> >    max = 2000
> >
> >    FH = io.open("/dev/urandom", "rb")
> >
> >    for i = 1, max, 1 do
> >       t[i] = FH:read(1024000)
> >       count = count + string.len(t[1])
> >    end
> >
> >    io.close(FH)
> >
> >    ts.debug("Total bytes allocated = " .. count .. " bytes")
> >    ts.debug("Garbage Collector reports = " .. collectgarbage("count") .. " MB")
> > end
> >
> > Result -
> >
> > pebc@piplup2:~/opt/ats-gh-master/bin$ ./traffic_server -V
> > Traffic Server 9.0.0 Jun 18 2019 14:16:03 piplup2
> > traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
> > Apache Traffic Server - traffic_server - 9.0.0 - (build # 061814 on Jun 18 2019 at 14:16:03)
> > pebc@piplup2:~/opt/ats-gh-master/bin$ ./traffic_server
> > Traffic Server 9.0.0 Jun 18 2019 14:16:03 piplup2
> > traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
> > [Jun 19 11:54:42.681] traffic_server DIAG: (ts_lua) Total bytes allocated = 2048000000 bytes
> > [Jun 19 11:54:42.681] traffic_server DIAG: (ts_lua) Garbage Collector reports = 2001149.2382813 MB
> >
> > Appreciate it if you could take a look and validate these results.
> >
> > Thanks,
> > Peter

RE: Lua plugin memory limit on Linux.

Posted by "Chou, Peter" <pb...@labs.att.com>.
Kit,

This is the only error message seen from diags.log. It did not cause the ATS to core dump.

[Jun 20 13:27:45.258] traffic_server NOTE: plugin.config loading ...
[Jun 20 13:27:45.259] traffic_server NOTE: loading plugin '/home/pebc/opt/ats-gh-master/libexec/trafficserver/tslua.so'
[Jun 20 13:28:14.337] traffic_server ERROR: [ts_lua_add_module] lua_pcall /home/pebc/opt/ats-gh-master/etc/trafficserver/test-memory.lua failed: not enough memory
[Jun 20 13:28:14.337] traffic_server ERROR: [ts_lua][TSPluginInit] ts_lua_add_module failed
[Jun 20 13:28:14.337] traffic_server NOTE: plugin.config finished loading

This is how much memory was allocated before the failure --

[Jun 20 13:28:14.323] traffic_server DIAG: (ts_lua) Total bytes allocated = 2071552000 bytes
[Jun 20 13:28:14.323] traffic_server DIAG: (ts_lua) Garbage Collector reports = 2024154.9023438 MB

Modified the Lua script as follows --

function __init__(argtb)
   count = 0
   t = {}
   max = 2100

   FH = io.open("/dev/urandom", "rb")

   for i = 1, max, 1 do
      t[i] = FH:read(1024000)
      count = count + string.len(t[1])
      if i > 2000 then
         ts.debug("Total bytes allocated = " .. count .. " bytes")
         ts.debug("Garbage Collector reports = " .. collectgarbage("count") .. " MB")
      end
   end

   io.close(FH)

end

Thanks,
Peter

-----Original Message-----
From: Shu Kit Chan <ch...@gmail.com> 
Sent: Wednesday, June 19, 2019 11:32 PM
To: dev <de...@trafficserver.apache.org>
Subject: Re: Lua plugin memory limit on Linux.

Thanks for the info.

That's good to know. Have you tried how much more you can allocate?
And when you are over the limit, what is the message you are getting?

Perhaps we can update the doc with this information.

Kit

On Wed, Jun 19, 2019 at 12:01 PM Chou, Peter <pb...@labs.att.com> wrote:
>
> Kit,
>
> Did not hear back from you regarding the memory limit for the Lua plugin on Linux.
>
> Previously, I had tested on the command line with the luajit executable, but I have completed some testing with the ATS master branch.
>
> I am running with Ubuntu 18.04 LTS Server 64-bit which ships with 'LuaJIT 2.1.0-beta3'.
>
> Using the following configuration, I got good results, able to allocated up to 2GB memory.
>
> plugin.config -
>
> tslua.so --states=1 test-memory.lua
>
> test-memory.lua -
>
> function __init__(argtb)
>    count = 0
>    t = {}
>    max = 2000
>
>    FH = io.open("/dev/urandom", "rb")
>
>    for i = 1, max, 1 do
>       t[i] = FH:read(1024000)
>       count = count + string.len(t[1])
>    end
>
>    io.close(FH)
>
>    ts.debug("Total bytes allocated = " .. count .. " bytes")
>    ts.debug("Garbage Collector reports = " .. collectgarbage("count") .. " MB")
> end
>
> Result -
>
> pebc@piplup2:~/opt/ats-gh-master/bin$ ./traffic_server -V
> Traffic Server 9.0.0 Jun 18 2019 14:16:03 piplup2
> traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
> Apache Traffic Server - traffic_server - 9.0.0 - (build # 061814 on Jun 18 2019 at 14:16:03)
> pebc@piplup2:~/opt/ats-gh-master/bin$ ./traffic_server
> Traffic Server 9.0.0 Jun 18 2019 14:16:03 piplup2
> traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
> [Jun 19 11:54:42.681] traffic_server DIAG: (ts_lua) Total bytes allocated = 2048000000 bytes
> [Jun 19 11:54:42.681] traffic_server DIAG: (ts_lua) Garbage Collector reports = 2001149.2382813 MB
>
> Appreciate it if you could take a look and validate these results.
>
> Thanks,
> Peter

Re: Lua plugin memory limit on Linux.

Posted by Shu Kit Chan <ch...@gmail.com>.
Thanks for the info.

That's good to know. Have you tried how much more you can allocate?
And when you are over the limit, what is the message you are getting?

Perhaps we can update the doc with this information.

Kit

On Wed, Jun 19, 2019 at 12:01 PM Chou, Peter <pb...@labs.att.com> wrote:
>
> Kit,
>
> Did not hear back from you regarding the memory limit for the Lua plugin on Linux.
>
> Previously, I had tested on the command line with the luajit executable, but I have completed some testing with the ATS master branch.
>
> I am running with Ubuntu 18.04 LTS Server 64-bit which ships with 'LuaJIT 2.1.0-beta3'.
>
> Using the following configuration, I got good results, able to allocated up to 2GB memory.
>
> plugin.config -
>
> tslua.so --states=1 test-memory.lua
>
> test-memory.lua -
>
> function __init__(argtb)
>    count = 0
>    t = {}
>    max = 2000
>
>    FH = io.open("/dev/urandom", "rb")
>
>    for i = 1, max, 1 do
>       t[i] = FH:read(1024000)
>       count = count + string.len(t[1])
>    end
>
>    io.close(FH)
>
>    ts.debug("Total bytes allocated = " .. count .. " bytes")
>    ts.debug("Garbage Collector reports = " .. collectgarbage("count") .. " MB")
> end
>
> Result -
>
> pebc@piplup2:~/opt/ats-gh-master/bin$ ./traffic_server -V
> Traffic Server 9.0.0 Jun 18 2019 14:16:03 piplup2
> traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
> Apache Traffic Server - traffic_server - 9.0.0 - (build # 061814 on Jun 18 2019 at 14:16:03)
> pebc@piplup2:~/opt/ats-gh-master/bin$ ./traffic_server
> Traffic Server 9.0.0 Jun 18 2019 14:16:03 piplup2
> traffic_server: using root directory '/home/pebc/opt/ats-gh-master/'
> [Jun 19 11:54:42.681] traffic_server DIAG: (ts_lua) Total bytes allocated = 2048000000 bytes
> [Jun 19 11:54:42.681] traffic_server DIAG: (ts_lua) Garbage Collector reports = 2001149.2382813 MB
>
> Appreciate it if you could take a look and validate these results.
>
> Thanks,
> Peter