LINUX.ORG.RU

Выявление утечек в приложениях

 , , , ,


0

2

Добрый день, расскажите, как можно выявить куда проваливается память в жаваскрипте?

Я пытаюсь прогонять софтину под отладчиком, но оно мне ничего не говорит. Я подозреваю что дело в кривых плагинах и несовместымых версиях хромиума, но как тогда выяснить где совместимая?

Софтина — игрушка на rpgmakermv (тысячи их, практически любая), причём, легаси билд nwjs (0.14.7) нормально работает — память всегда в районе 200 мб, нет кучи процессов, сборщик всё очищает. Более новые показывают в отладчике занятыми какую-то сотню мегабайт, но имеют кучу процессов которые быстро разрастаются на гигабайты, память кончается и линукс зависает (полностью). Такое ощущение, что gc не работает корректно, иногда при смене сцен прибавляет сразу по сотке мегабайт (что даже не отражено в отладчике?).

Помимо последних 3, были проверены также 0.27.3 0.24.4 0.23.7 0.22.3 и все они текут хоть и меньше 0.38 0.39. Я ориентируюсь по версиям хромиума в вендовом экзешнике, там допустим 17 год. Всё равно течёт. В 0.14.7 не текла несмотря на то что нужна была совсем уж древняя версия хромиума и 0.14.7 сильно свежее.

Что можно сделать?

Алсо, добавьте тег nwjs? У электрона есть свой тег, несправедливость!

Может быть дело в линуксе?

linuxnewbie
() автор топика

Меня посетила внезапная мысль, можно посравнивать версию шейдера (если его нет, то это легаси nwjs).

Вот такое написано в dll

Google SwiftShader
OpenGL ES 3.0 SwiftShader 4.0.0.0
OpenGL ES 2.0 SwiftShader 4.0.0.0
OpenGL ES GLSL ES 3.00 SwiftShader 4.0.0.0
OpenGL ES GLSL ES 1.00 SwiftShader 4.0.0.0

и такое в версии с которой я пытаюсь запускать, т.е. мне нужна версия ещё новее? версии хромиума в экзешнике чего-то нет

Google SwiftShader
OpenGL ES 3.0 SwiftShader 3.3.0.2
OpenGL ES 2.0 SwiftShader 3.3.0.2
OpenGL ES GLSL ES 3.00 SwiftShader 3.3.0.2
OpenGL ES GLSL ES 1.00 SwiftShader 3.3.0.2
linuxnewbie
() автор топика
Ответ на: комментарий от linuxnewbie

Нет, подходящая версия тоже течёт (с шейдером 4.0.0.0, даже строки в одинаковом порядке) и следующая за ней (4.0.0.3). Какая-то проблема не связанная с версиями?

linuxnewbie
() автор топика
Ответ на: комментарий от linuxnewbie

Хотя может и течёт. Только перезагрузка с f5 собирает весь мусор и откатывает до 200 мегабайт, с теми версиями остаётся как было (700+ на 1 процесс и 500+ на второй, это за пару минут где-то).

linuxnewbie
() автор топика

Если «течёт» не сам код на javascript’е, а низкоуровневые сишные/плюсовые библиотеки, то возможно поможет valgrind/memcheck. Если проблема не в утечках (выделенная память, которая не освобождается вообще), а в нерациональном использовании памяти (она освобождается, но сильно позже чем надо, например при завершении программы), то может помочь valgrind/massif. Но учти, что под valgrind всё будет тормозить. Плюс, если ты отлаживаешь проприетарщину без отладочной информации, то результат работы valgrind вряд ли будет полезен.

В жаваскрипте не разбираюсь.

Deleted
()
Ответ на: комментарий от Deleted

В кальке glibc без отладочных символов. Это надо мержить генту, минус два гигабайта памяти. Скорее всего будет тормозить в эмуляторе, rpgmakermv очень ресурсоёмкий, но надо будет попробовать если других решений не предложат.

linuxnewbie
() автор топика

Пообколются своим жаваскриптом, а потом в утечки долбятся.

Там же сборщик мусора, не может же быть утечечек даже если клоун на велосипеде во время секса с бегемотом писал код!

По теме - надо добыть лог сборщика мусора, если хотя бы его не клоуны писали, то там должен быть свой профилировщик памяти. Если он ничего интересного не покажет - нужно использовать ~valgrind~ msan(хотя эта опенсурсная лапша будет чуть менее чем полностью состоять из ликов и прочих шалостей думаю), или поискать ещё какой трейсер для памяти.

Проблема тут вот в чём: пока софт не завершился, отличить лик от не лика невозможно, а я почти уверен, что твои nГб потерянных разом где-то освобождаются на выходе. Поэтому нужно найти способ проверить сколько времени память осталась не освобождённой и неизменной, и даже это не будет гарантией того, что это лик без понимания, кто этой памятью таки владеет и управляет.

pon4ik ★★★★★
()

Если твоё поделие запускается в тормозилле, то можно попробовать заюзать их поделку. В противном случае я бы смотрел на решения типа heaptrack. В тех софтинах, с которыми мне приходится иметь дело - утечки успешно ищутся с помощью msan и юнит тестов.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Оно не запускается в браузере (или я не знаю как запустить), у nwjs есть профилировщик и он сообщает что израсходовано 50 мегабайт. На деле вытекло что-то до 1500 мегабайт, начались тормоза (фреймдропы на пустом месте, задержки возрастают до 70 миллисекунд). Жалуется на медленный интернет и шрифты, но это наверно не связано.

linuxnewbie
() автор топика
Ответ на: комментарий от linuxnewbie

Старая версия тоже течёт похоже, только делает это куда более скромно, за несколько часов набежало с сотню мегабайт неучтённых — с этим можно жить.

linuxnewbie
() автор топика
Ответ на: комментарий от linuxnewbie

Ещё оно пытается сохранять файлы в /save (да это корень) вместо ./save, но то возможно баг в коде (иногда встречается).

linuxnewbie
() автор топика
Ответ на: комментарий от linuxnewbie

А также дефолтный путь для кешей в ~/.cache/KADOKAWA/RPGMV/ тут же оно сохраняет в ~/.cache/Default/ — возможно, это необходимо учитывать, поскольку при тестовом запуске в порядке уменьшения версии очень ругается на более старую версию рантайма, если кэши не почистить.

linuxnewbie
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.