2011-01-04 5 views
4

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

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

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

+0

Просто комментарий, я использую mod_mono на моем производственном сервере (но его не так много. Я размещаю 4 сайта, которые никто никогда не посещает), и я не заметил никаких проблем или утечек. Ключевое слово - уведомление. Однако хочу упомянуть, что у меня были проблемы с 2.8, поэтому я вернулся к Mono 2.6.7. Так что, возможно, вам стоит рассмотреть возможность возврата, если 2.8 не решает эту проблему. Я использую последние 2.6. * Моно, XSP, Mod_Mono и GDIplus. Первоначально я понижался только моно, но, похоже, это не похоже на микс. –

ответ

8

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

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

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

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

[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 больше не теряет семафоров.

0

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

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

+0

Я дам ему попробовать, но мне кажется, что семафоры являются механизмом IPC для координации XSP и apache, поэтому не связаны с сборкой мусора .NET –

+0

После тестирования это ничего не изменило. Все еще протекающие массивы семафоров :( –

1

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

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

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

+0

Пробовал настройку через MonoSetEnv, но я уже создал около 20 массивов семафоров, и ни один из них не был удален :( –