[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: HyperHacker <hyperhacker@...>
- Date: Thu, 4 Aug 2011 03:38:40 -0600
On Thu, Aug 4, 2011 at 03:21, Andrzej Pruszynski
<andrzej.pruszynski@autodesk.com> wrote:
>
> 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
>
>
I think the "memory usage going up and down" is normal, resulting from
LuaSocket creating internal temporary objects which eventually get
collected. I saw the same behaviour in a server I wrote.
The sudden spikes seem like possible memory corruption of some sort...
note 4194304 = 0x400000...
--
Sent from my toaster.