Ключевые слова:apache, suexec, limit, patch, (найти похожие документы)
Date: Sun, 23 Mar 2003 19:06:03 +0300 (MSK)
From: Dmitry Morozovsky <[email protected]>
Subject: Патч для suexec для ограничения числа процессов
DA> мне вариант с suexec не нравится только одним - не работает ограничение на
DA> кол-во процессов (suexec из-под рута выставляет класс и делает execv. при
DA> этом дочерние процессы этой cgi могут не запускатся, но сама cgi стартует
DA> всегда)
--- src/support/suexec.c.old Sun Mar 2 17:35:06 2003
+++ src/support/suexec.c Sun Mar 2 17:46:46 2003
@@ -645,7 +645,16 @@
ap_execve(cmd, &argv[3], environ);
}
#else /*NEED_HASHBANG_EMUL*/
- execv(cmd, &argv[3]);
+ switch (vfork()) {
+ case -1:
+ log_err("emerg: (%d)%s: vfork failed (%s)\n", errno,
strerror(errno), cmd);
+ exit(255);
+ case 0:
+ execv(cmd, &argv[3]);
+ break; /* shouldn't be neededm but... */
+ default:
+ _exit(0);
+ }
#endif /*NEED_HASHBANG_EMUL*/
/*
From: Alex Tutubalin <[email protected]>
> Тогда ulimit пользователю apache в системе. Перед запуском httpd.
Это все верно. Но это очень грубо - если лимит сработает в процессе
обработки запроса (а он сработает именно тогда, ибо между запросами
памяти расти не от чего), то клиент не получит
ответа, либо получит его не целиком (если апач убъет после отдачи
пары килобайт HTML).
Apache::SizeLimit проверяет лимиты _после_ отработки запроса и корректно
завершает дите если лимит превышен. За что и ценим. Конечно, от грубых
ошибок в content handlers это не полечит, но проблема обычно в постепенном
росте размера apache child - в перле гниют биты, не в перле - тоже гниют
биты :)