[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Lua GC breaks with socket.select on Solaris 5.10
- From: Andrzej Pruszynski <andrzej.pruszynski@...>
- Date: Thu, 4 Aug 2011 09:21:11 +0000
Hello,
Lua is used on many '5.10 Generic_142909-17 sun4v sparc SUNW,SPARC-Enterprise-T5120' servers and in all cases copas.lua module is used, lua 5.1.4 will trigger core dump, after some time. I used official luasocket-2.0.2 and unofficial luasocket-2.0.3.
I managed to focus on garbage collector and socket.select used by copas.lua and the following script demonstrates the problem (it works fine on Windows XP 32, Windows 7.0 64):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
require("socket")
local i = 0
while true do
t = {}
socket.select(nil, nil, 0.05)
i = i + 1
if ( i % 10 == 0 ) then collectgarbage("collect") end
print("kB", gcinfo(), i)
t = nil
end
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Available memory goes down from 40 kB to 0 when 'i' reaches 400 and then memory counter shows '4194303' when loop reaches 410:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kB 2 409
kB 4194303 410
kB 0 411
kB 0 412
kB 0 413
kB 0 414
kB 0 415
kB 0 416
kB 0 417
kB 1 418
kB 1 419
kB 4194302 420
kB 4194303 421
kB 4194303 422
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When I use 'msleep' module setting the same timeout, 'collect' keeps the memory size around 38 kB.
If 'collectgarbage("collect")' is not used, something different happens. Memory goes up and down in two waves reaching near 0 in ~ 1100 loop steps and then it will go up forever (well, till system has free memory available).
Thank you for any hints about possible fix.
Andrzej