Apache在运行mod_mono时泄漏信号量

时间:2011-01-04 07:14:05

标签: apache asp.net-mvc-2 mono mod-mono

我在mod_mono下使用mono 2.8.1运行ASP.NET MVC2应用程序,目前必须定期清除apache似乎泄漏的信号量数组。

我开始使用单转rpm的2.6.7一段时间,但是在泄漏的信号量数组(即在 ipcs 中越来越多的积累)和与ASP.NET MVC2的某些不兼容性方面遇到了一些问题,所以我从源码建立了2.8。泄漏仍在继续,所以我只是从源头构建了2.8.1,同样的事情仍在发生。这是在亚马逊AMI上(我猜它是引擎盖下的核心)。症状是信号量数组不断积累,如果我在一段时间后没有用 ipcrm 手动删除它们,那么对ASP.NET页面的请求将不返回日志中没有错误的内容。我还在5.4 AMI的中心复制了同样的问题。

是否有人在apache / mod_mono下成功运行ASP.NET,我只是遇到了一些边缘情况?由于我无法找到任何其他人发现这种情况,我认为这不是一般的ASP.NET错误。我有什么想法可以进一步解决这个问题吗?

3 个答案:

答案 0 :(得分:9)

最后想出来了,虽然解决方案暴露了我自己的错误,没有跟进我收到的其他警告,但我认为这应该对其他任何人都有用。

默认情况下,apache config具有以下配置顺序:

Include conf.d/*.conf
User apache
Group apache

即。在设置httpd用户和组之前加载所有conf文件(通常是定义vhosts的地方)。这会在重启时产生以下警告:

[Mon Jan 24 00:12:50 2011] [crit] The unix daemon module not initialized yet.
Please make sure that your mod_mono module is loaded after the User/Group
directives have been parsed. Not initializing the dashboard.

虽然一切似乎无论如何都有效,但这是信号量泄漏的原因。如果您在Include之后移动User/Group,则警告消失,mod_mono不再泄漏信号量。

答案 1 :(得分:1)

我已经看到了跨进程句柄使用的共享内存。

我的修复是设置MONO_DISABLE_SHM = 1,但我不确定这是否是您的问题,因为从2.8开始禁用跨进程句柄支持。

您可能仍然可以尝试使用MONO_DISABLE_SHM来查看它是否有所作为。

答案 2 :(得分:0)

尝试使用新的sgen垃圾收集器而不是Boehm。

  

要使用新的垃圾收集器,您   只需要调用Mono   --gc = sgen命令行选项,或设置MONO_ENV_OPTIONS环境   变量包含“--gc = sgen”   选项。默认情况下Mono继续   使用Boehm收藏家。