【发布时间】: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