haskell - 基于物理内存运行GC

标签 haskell garbage-collection

我在 AWS Lambda 上运行我的代码,根据我分配给 Lambda 的内存,我遇到了一些性能问题。
对于同一个调用:

             128 MB | 256 MB
           +--------+-------+
Cold start |  3.5s  |   2s  |
-----------+--------+-------+
Nominal    | 0.14s  | 0.14s |
最大已用内存始终为 85-90 MB。
我的猜测是 GC 触发太频繁了。
我试过看 the RTS doc ,看起来像 -c <n>将允许增加阈值,但它需要我使用 -M <size>但我不知道在那里放什么。
有没有办法根据物理内存或总内存设置阈值?

最佳答案

我想一种方法是通过 shell 替换。然后你可以把你想要的任何计算放在那里。例如,在我的机器上,像这样计算可用内存的一半:

(echo scale=0; sed '/^MemTotal:/!d;s/[^0-9]//g;s.$./2.' /proc/meminfo) | bc
说明:提取MemTotal: ...来自 /proc/meminfo 的线路, 删除不是数字的所有内容,并附加 /2除以 2。初始 scale=0告诉 bc四舍五入到最接近的整数。
将其滚动到命令的参数列表中,如下所示:
myFancyHaskellProgram +RTS -M $( (echo scale=0; sed '/^MemTotal:/!d;s/[^0-9]//g;s.$./2.' /proc/meminfo) | bc )K

关于haskell - 基于物理内存运行GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66461055/

相关文章:

haskell - 在 NixOS 中,如何从命令行运行 Haskell 可执行文件?

haskell - 在 haskell 中创建 monad

haskell - 将 Nat 从类型族调用转换为 Integer

java - glTexImage2D 中的 ByteBuffer.wrap() 导致过多的垃圾收集

java - 为什么 Android 应用程序 RAM 使用量会永远稳定增加?甚至 Hello World 应用程序

haskell - 我可以利用惰性评估来引用将来的值而不会出现空间泄漏吗?

scala - 为什么值类仅限于 AnyVal?

memory-leaks - 禁用D的GC是 'ok'吗?

javascript - 制作动画时防止 javascript gc

java - 在 Clojure 中强制垃圾收集是个好主意吗?