Closed Toshik closed 9 years ago
It's not necessarily a leak as Lua performs garbage collection lazily.
Try calling collectgarbage("collect")
before printing heap amount first. TIA
@dvv I have ran into that issue - my DNS was dead and ESP drains all memory...
Anyway, even with garbage collector same issue:
function TestDNSLeak()
c=net.createConnection(net.TCP, 0)
c:connect(80, "bad-name.tld")
tmr.alarm(1, 3000, 0, function() collectgarbage("collect") print("hack socket close, MEM: "..node.heap()) c:close() end) -- socket timeout hack
print("MEM: "..node.heap())
end
> TestDNSLeak()
MEM: 20072
> DNS retry 1!
DNS retry 2!
DNS retry 3!
DNS retry 4!
DNS Fail!
hack socket close, MEM: 20696
TestDNSLeak()
MEM: 19736
> DNS retry 1!
DNS retry 2!
DNS retry 3!
DNS retry 4!
DNS Fail!
> hack socket close, MEM: 20464
TestDNSLeak()
MEM: 19488
> DNS retry 1!
DNS retry 2!
DNS retry 3!
DNS retry 4!
DNS Fail!
hack socket close, MEM: 20184
TestDNSLeak()
MEM: 19264
> DNS retry 1!
DNS retry 2!
DNS retry 3!
DNS retry 4!
DNS Fail!
hack socket close, MEM: 20000
TestDNSLeak()
MEM: 19072
> DNS retry 1!
DNS retry 2!
DNS retry 3!
DNS retry 4!
DNS Fail!
hack socket close, MEM: 19808
This is related: https://github.com/nodemcu/nodemcu-firmware/issues/189
If able to specify DNS servers, it would be helpful. Google's DNS servers are much better than my local ISP's.
On Fri, Feb 20, 2015 at 4:59 AM, Toshik notifications@github.com wrote:
@dvv https://github.com/dvv I have ran into that issue - my DNS was dead and ESP drains all memory...
Anyway, even with garbage collector same issue:
function TestDNSLeak() c=net.createConnection(net.TCP, 0) c:connect(80, "bad-name.tld") tmr.alarm(1, 3000, 0, function() collectgarbage("collect") print("hack socket close, MEM: "..node.heap()) c:close() end) -- socket timeout hack print("MEM: "..node.heap()) end
TestDNSLeak() MEM: 20072 DNS retry 1! DNS retry 2! DNS retry 3! DNS retry 4! DNS Fail! hack socket close, MEM: 20696 TestDNSLeak() MEM: 19736 DNS retry 1! DNS retry 2! DNS retry 3! DNS retry 4! DNS Fail! hack socket close, MEM: 20464 TestDNSLeak() MEM: 19488 DNS retry 1! DNS retry 2! DNS retry 3! DNS retry 4! DNS Fail! hack socket close, MEM: 20184 TestDNSLeak() MEM: 19264 DNS retry 1! DNS retry 2! DNS retry 3! DNS retry 4! DNS Fail! hack socket close, MEM: 20000 TestDNSLeak() MEM: 19072 DNS retry 1! DNS retry 2! DNS retry 3! DNS retry 4! DNS Fail! hack socket close, MEM: 19808
— Reply to this email directly or view it on GitHub https://github.com/nodemcu/nodemcu-firmware/issues/234#issuecomment-75214232 .
I can reproduce this
This problem is still relevant, and I opened a new issue about it since I can't reopen this one...basically, the test used is the same like this here, and behaviour goes from full restart immediatelly, after a few dns retry/fail attempts or after some undefined time, like 10 minutes or more...
NodeMCU 0.9.5 build 20150213 powered by Lua 5.1.4
net.socket:connect() leaks memory when called by hostname and DNS query failed. Base leak is about 240 bytes per call.
Test case:
Now run TestDNSLeak() every 5 seconds (do it not too fast, to get timer executed):