#deno
#дено
Вопрос:
У меня есть небольшое приложение Deno, которое загружает несколько объектов из Redis, помещает их на карту<>, а затем обрабатывает список с интервалами.
На карте около 70 тысяч предметов.
После того, как приложение было запущено некоторое время, я получаю:
<--- Last few GCs --->
[15305:0x28fb00000000] 115966 ms: Mark-sweep (reduce) 1399.1 (1402.3) -> 1398.9 (1403.8) MB, 1911.3 / 0.0 ms (average mu = 0.050, current mu = 0.001) allocation failure scavenge might not succeed
[15305:0x28fb00000000] 117600 ms: Mark-sweep (reduce) 1399.4 (1402.3) -> 1399.2 (1403.0) MB, 1632.3 / 0.0 ms (average mu = 0.025, current mu = 0.001) allocation failure scavenge might not succeed
<--- JS stacktrace --->
#
# Fatal javascript OOM in Ineffective mark-compacts near heap limit
#
Я протестировал увеличение размера старого пространства с: --v8-flags=--max-old-space-size=8192
Что заставляет приложение работать немного дольше, а затем сбой с:
<--- Last few GCs --->
[15462:0x3c300000000] 303937 ms: Scavenge (reduce) 3930.6 (3936.0) -> 3930.5 (3939.7) MB, 20.4 / 0.0 ms (average mu = 0.911, current mu = 0.725) allocation failure
[15462:0x3c300000000] 303960 ms: Scavenge (reduce) 3931.9 (3937.2) -> 3931.4 (3939.7) MB, 19.2 / 0.0 ms (average mu = 0.911, current mu = 0.725) allocation failure
[15462:0x3c300000000] 303993 ms: Scavenge (reduce) 3931.9 (3937.2) -> 3931.8 (3944.7) MB, 31.5 / 0.0 ms (average mu = 0.911, current mu = 0.725) allocation failure
<--- JS stacktrace --->
#
# Fatal javascript OOM in MarkCompactCollector: young object promotion failed
#
Я подозреваю, что у меня утечка памяти в моем коде, но как я могу
- Получить дамп кучи на ООМ и проверить его?
- Постоянно отслеживать память (и другие) показатели Deno
Ответ №1:
Один из способов получить дампы кучи — подключиться к процессу с помощью Chrome или VSCode.
Это можно сделать, добавив --inspect-brk
опцию командной строки при запуске Deno.
https://deno.land/manual@v1.0.0/tools/debugger
По состоянию на 2020-09 они заявляют:
профилирование и дампы памяти могут работать некорректно