【问题标题】:How can I debug OOM crashes in Deno如何在 Deno 中调试 OOM 崩溃
【发布时间】:2020-09-06 18:55:28
【问题描述】:

我有一个小型 Deno 应用程序,它从 Redis 加载许多对象,将它们放在 Map 中,然后按时间间隔处理列表。

地图中有大约 7 万个项目。

应用程序运行一段时间后,我得到:

<--- 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
#

我怀疑我的代码中存在内存泄漏,但我该怎么办

  • 在 OOM 上获取堆转储并检查它?
  • 持续监控 Deno 的内存(和其他)指标

【问题讨论】:

    标签: deno


    【解决方案1】:

    获取堆转储的一种方法是使用 Chrome 或 VSCode 连接到进程。

    可以通过在运行 Deno 时添加--inspect-brk 命令行选项来完成。

    https://deno.land/manual@v1.0.0/tools/debugger

    截至 2020 年 9 月,他们声明:

    分析和内存转储可能无法正常工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      相关资源
      最近更新 更多