Как я могу отладить сбои ООМ в Deno

#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 они заявляют:

профилирование и дампы памяти могут работать некорректно