Wpis z mikrobloga

#programowanie #webdev #nodejs #javascript #opencv #raspberrypi #bananapi

Siema Mirki, mam problem z wyciekiem pamięci na Debianie pod BananaPi. Poniższa funkcja pobiera obrazek z serwera i wykonuje detekcję, działa w pętli i za każdym razem po wykonaniu readImage() zjada 4MB ramu nie zwalniając go. Ktoś ma pomysł dlaczego? Pod nodem nie mogę używać funkcji im.release() jak w c++, czy jest jakiś inny sposób żeby urchonić się przed wyciekami pamięci?

Próbowałem już
1) global.gc() - garbage collector
2) echo 3 >/proc/sys/vm/dropcaches - zwalnienie cachy w systemie (trochę pomaga, ale nie odzyskuje wszystkiego)

download = wget.download(src, path + filename, options);

download.on('end', function(output) {

cv.readImage(path + filename, function(err, im) {
if (err) throw err;
if (im.width() < 1 || im.height() < 1) throw new Error('Image has no size');

im.detectObject('data/cascade.xml', {}, function(err, cars) {
if (err) throw err;

for (var i = 0; i < cars.length; i++) {
car = cars[i];
im.rectangle([car.x, car.y], [car.width, car.height], [0, 255, 0], 2);
}

im.save(path + '_' + filename);

});
});
});

Edit: Sorry za wklejony kod, wykop coś sie popsuł. Jak coś link do PB -> http://pastebin.com/vpBmnrae
  • 25
@obereczekpl: używałem już heapdump-a, ale nic z tego nie wynika, przyrost heap-a jest nieznaczny, widać, ze GC działa ok, czasami więcej czasami mniej ale +/- 200KB, a mi zjada 3-4MB ramu z każdym cyklem. sądzę, że wina 99% leży po stronie opencv, nodejs-opencv to jedynie "przejściówka" na zainstalowane opencv w systemie, mam w wersji 2.9.1, wyższej się nie da, bo nodejs nie jest kompatybilny z 3.0.0.

polecenie w bashu:

echo 3
@obereczekpl: @larvaexotech: @DiKey: Niezbyt ładne rozwiązanie, ale działa. Dodałem do /etc/crontab linijkę:

* * * * * root sync; sync; sync; echo 3 >/proc/sys/vm/drop_caches;
Czyli co minutę czyści cache. Trochę niesmak pozostał, bo wolę, żeby kod nie był wadliwy, ale chyba w tym przypadku nic innego nie pomoże.
@CzarnyBelzebub: Zgłosiłem problem na githubie OpenCV dla NodeJS -> https://github.com/peterbraden/node-opencv/issues/411 niech naprawiają, bo to ewidentnie wina tej biblioteki (zresztą nie pierwszy raz mają problemy z wyciekami pamięci). Linijka powyżej działa znakomicie doraźnie rozwiązując ten problem.

@DiKey: @obereczekpl: @larvaexotech: @CzarnyBelzebub: Dziękuje wam panowie za wsparcie i pomysły. Znowu okazało się, że Polacy najlepiej ogarniają programowanie. Na stackoverflow nikt nawet nie był w stanie podjąć dyskusji, tak samo na