Haskell分析器看到内存使用太少

时间:2016-10-27 13:06:22

标签: haskell memory profiling bytestring memory-profiling

我正在尝试调试使用过多内存的程序。我已经运行了性能分析并使用了运行时选项-s -p -h -xt。然后我使用hp2ps绘制生成的.hp文件:

enter image description here

然而,实际的内存使用量大约为650 Mb(程序在docker容器中运行,我用docker stats看到了。

-s选项为我提供了此输出,确认了650 Mb:

157,666,975,520 bytes allocated in the heap
 311,897,256 bytes copied during GC
 202,383,488 bytes maximum residency (609 sample(s))
  64,558,856 bytes maximum slop
         635 MB total memory in use (200 MB lost due to fragmentation)

                                 Tot time (elapsed)  Avg pause  Max pause
Gen  0     301713 colls,     0 par    1.932s   1.803s     0.0000s    0.0022s
Gen  1       609 colls,     0 par    2.743s   2.694s     0.0044s    0.0104s

TASKS: 5 (1 bound, 4 peak workers (4 total), using -N1)

SPARKS: 0 (0 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)

INIT    time    0.001s  (  0.001s elapsed)
MUT     time   64.448s  ( 84.663s elapsed)
GC      time    4.499s  (  4.320s elapsed)
RP      time    0.000s  (  0.000s elapsed)
PROF    time    0.176s  (  0.177s elapsed)
EXIT    time    0.001s  (  0.001s elapsed)
Total   time   69.137s  ( 88.985s elapsed)

Alloc rate    2,446,431,692 bytes per MUT second

Productivity  93.2% of total user, 72.4% of total elapsed

gc_alloc_block_sync: 0
whitehole_spin: 0
gen[0].sync: 0
gen[1].sync: 0

阅读this post似乎使用选项-xt -hy解决了类似的问题,但这对我没有用(并且在情节中给了我更少的信息)。我还尝试了在thisthisthis问题中建议的解决方案。

我怀疑使用ByteString的函数是负责任的,因为它使用pinned memory

有什么想法吗?

0 个答案:

没有答案