[Ovmsdev] Memory leak

Michael Balzer dexter at expeedo.de
Sun Apr 22 22:28:34 HKT 2018


I could reproduce the situation, it was caused by a combination of…

(a) the modem being captured in an endless reconnect retry loop
(b) the notifications, still being allocated from internal RAM, adding up while server.v2 waits for the connection

I have pushed a solution for (b) and an attempt for (a) -- couldn't test that yet.

The effect of (a) is the modem only answers "ERROR" to the +CGDATA="PPP" command. I have tried different commands to reset the internal state, but it was stuck,
only a power cycle could solve this. I have added an automatic power cycle for this situation, but it didn't occur again yet.

The solution for (b) is to move the notifications buffer to external RAM. As that went without any problems, I also moved the command and server communication
buffers to external RAM, which also went without problems.

In action:

… (sending 15 battery data notifications) …
I (645344) ovms-server-v2: Send MP-0 h70,1,RT-BAT-C,14,86400,2,1,4105,4105,4105,10,15,15,15,0
OVMS# mo m
Free 8-bit 57692/281968, 32-bit 8052/24308, SPIRAM 4124384/4194252
--Task--     Total DRAM D/IRAM   IRAM SPIRAM   +/- DRAM D/IRAM   IRAM SPIRAM
OVMS Events       53012  49124      0  12604         +0     +0     +0  +1768
… (receiving 15 acks) …
I (648804) ovms-server-v2: Incoming Msg: MP-0 h70
OVMS# mo m
Free 8-bit 57692/281968, 32-bit 8052/24308, SPIRAM 4125488/4194252
--Task--     Total DRAM D/IRAM   IRAM SPIRAM   +/- DRAM D/IRAM   IRAM SPIRAM
OVMS Events       53012  49124      0  10836         +0     +0     +0  -1768


I have added a C++11 allocator template "ExtRamAllocator" for this, which can be used for all allocator-aware standard classes. "ovms_extram.h" provides a
namespace "extram" for std type instances using the allocator. It now has "string" and "ostringstream", please add further types as needed.

@Steve: I would like to keep the allocation/task ownership info for now, I think it's worth the overhead.

Regards,
Michael

-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26





More information about the OvmsDev mailing list