我有一个Snap网络应用程序,它提供一些JS文件和1像素的图像(其主要任务是快速工作而不是提供大量的HTML/媒体内容)。在HAProxy后面有几个服务器。
我将其从GHC 7.6升级到7.8,并升级了一些库。升级后,应用程序开始逐渐泄漏(在所有服务器上),每15分钟在8GB RAM机器上结束OOM(在16Gb RAM机器上时间更长)并在重新启动后重复此过程。
问题是,如果我为配置文件编译应用程序并运行一段时间,我就看不到任何内存泄漏。它只使用1个CPU并在恒定的小内存中工作。
因此,我想请教如何找到这样的瓶颈的一般建议,如果在性能分析下运行没有太大帮助。
更新:我注意到,在尝试该应用程序后,如果我删除
更新2:仅供记录,我发现使用
更新3:我推荐将此问题标记为“过于广泛”。总的来说,我认为如果存在这样一组通用工具,可以更轻松地分析内存,那么它们肯定会在维基等其他文档中记录。
我将其从GHC 7.6升级到7.8,并升级了一些库。升级后,应用程序开始逐渐泄漏(在所有服务器上),每15分钟在8GB RAM机器上结束OOM(在16Gb RAM机器上时间更长)并在重新启动后重复此过程。
问题是,如果我为配置文件编译应用程序并运行一段时间,我就看不到任何内存泄漏。它只使用1个CPU并在恒定的小内存中工作。
因此,我想请教如何找到这样的瓶颈的一般建议,如果在性能分析下运行没有太大帮助。
更新:我注意到,在尝试该应用程序后,如果我删除
-A100M
运行时选项,它不会那么快地OOM,但使用默认值HAProxy的“sessions”达到其限制(因此基本上被阻塞)。我现在正在尝试使用不同的RTS选项,希望其中一些将有助于实现性能和长期内存消耗两全其美。更新2:仅供记录,我发现使用
-A30
rts选项的应用程序虽然内存占用较高,但表现良好。8Gb机器OOM-kill应用程序,但16Gb机器看起来像这样:http://i.imgur.com/3W9KpFS.png(绿线是“可用RAM”,您可以在图表上看到重新部署过程,该过程在应用程序上重启)。我对结果感到满意,但仍然很高兴了解任何多线程应用程序内存分析技术。更新3:我推荐将此问题标记为“过于广泛”。总的来说,我认为如果存在这样一组通用工具,可以更轻松地分析内存,那么它们肯定会在维基等其他文档中记录。