hirthwork
08.01.2013 14:49 mcabber
Смотришь код nginx — после каждой аллокации проверка того, что не память не кончилась. Смотришь код Apache HTTP Server — аллоцируем память и сразу хуярим в неё данные, segfault — лучший способ оповестить пользователя, что что-то пошло не так
enterprise-level scalable stable robust code
ога. радует что хоть какой-то подход Сысоев не стал перенимать из httpd
ну, в чем-то возможно apache и правы: если кончилась память — это обычно означает скорые похороны. впрочем, не везде и не всегда, согласен.
если кончилась память и это произошло по вине сервера, то можно тупо дропать входящие запросы (или же отдавать 50x) покуда не рассосутся запросы, которые сожрали всю память. в этом случае хотя бы часть запросов продолжит нормально обрабатываться, а когда пиковая нагрузка спадёт — запросы продолжат обрабатываться как ни в чём ни бывало.
к сожалению, nginx не поддерживает трединговую модель работы и использовать мне придётся httpd
в зависимости от того, нужно ли нам для ухода в "дропающее" состояние выделять память или нет. Ежели не нужно — да, вполне можно. Ну и от того, сколько памяти не удалось выделить: если полметра, это одно, если 40 байт — плохи дела.
для ухода в дропающее состояние память не нужна. у тебя после accept() есть fd, если не смог выделить память, то просто делаешь write(fd) со статической строкой «HTTP/1.1 503 Service Unavailable\r
Connection: close\r
\r
» и закрываешь сокет. никакой дополнительной памяти это не потребует и жить в таком состоянии сервер может пока опасность не минует
блджад, в первый раз недоволен тем, что
автоматически на переносы строк заменились
да, так можно. и так стоит делать в идеале, согласен.
У тебя в sayto написано echo -e ?
ну да
Хм. Интересно, а как тогда эканировать бэкслэш? echo -e
Блядь, я тоже соснул.