Apache пропускает семафоры при запуске mod_mono - PullRequest
4 голосов
/ 04 января 2011

Я запускаю приложение ASP.NET MVC2 под mod_mono с mono 2.8.1 и в настоящее время должен периодически очищать массивы семафоров, которые, по-видимому, просачиваются в Apache.

Некоторое время назад я начал с монооборотов для 2.6.7, но у меня были некоторые проблемы как с утечками семафорных массивов (то есть все больше и больше накапливающихся в ipcs ), так и с несовместимостью с ASP.NET MVC2, Я построил 2.8 из источника. Утечка продолжалась, поэтому я просто собрал 2.8.1 из источника, и то же самое все еще происходит. Это на Amazon AMI (я думаю, что это Centos под капотом). Симптомы состоят в том, что семафорные массивы продолжают накапливаться, и если я не удаляю их вручную с помощью ipcrm , то через некоторое время запросы к страницам ASP.NET не возвращают содержимого без ошибок в журналах. Я также воспроизвел ту же проблему в Centos 5.4 AMI.

Кто-нибудь успешно запускает ASP.NET под apache / mod_mono, и я просто сталкиваюсь с каким-то крайним случаем? Поскольку я не могу найти упоминаний о том, что это происходит с кем-то еще, я предполагаю, что это не общая ошибка ASP.NET. Любые идеи, как я могу решить эту проблему дальше?

Ответы [ 3 ]

9 голосов
/ 26 января 2011

Наконец-то понял это, и хотя решение показывает мою собственную ошибку - не повторять другое предупреждение, которое я получаю, я думаю, это должно быть полезно всем, кто сталкивается с этим.

По умолчанию в конфигурации apacheниже порядок конфигурации:

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

Т.е. все файлы conf (обычно там, где определены vhosts) загружаются до того, как будут установлены httpd user и group.Это приводит к приведенному ниже предупреждению при перезапуске:

[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 голос
/ 05 января 2011

Я видел это с общей памятью, используемой кросс-процессными дескрипторами.

Мое исправление состояло в том, чтобы установить MONO_DISABLE_SHM = 1, однако я не уверен, что это ваша проблема, поскольку кросс-процессподдержка дескрипторов отключена, начиная с 2.8.

Возможно, вы все еще можете попробовать MONO_DISABLE_SHM, чтобы увидеть, если это что-то меняет.

0 голосов
/ 04 января 2011

Попробуйте использовать новый sgen сборщик мусора вместо Boehm.

Чтобы использовать новый сборщик мусора, вам просто нужно вызвать Mono с помощью команды --gc = sgenпараметр line или установите переменную окружения MONO_ENV_OPTIONS для включения параметра --gc = sgenПо умолчанию Mono продолжает использовать коллектор Boehm.

...