вопрос о настройке nginx

#nginx #lighttpd

Вопрос:

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

У меня есть сервер под управлением 64-разрядной версии Centos 5.2. Довольно мощный двухъядерный сервер 2 с 4 ГБ памяти. В основном он обслуживает статические файлы, флэш-память и изображения. Когда я использую lighttpd, он легко обслуживает более 80 МБ/сек, но когда я тестирую с помощью nginx, он падает до менее чем 20 МБ/сек.

Моя настройка довольно проста, использует установочный файл по умолчанию, и я добавил следующее

 user  lighttpd;
worker_processes  8;
worker_rlimit_nofile 206011;
#worker_rlimit_nofile 110240;

error_log   /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;


events {
    worker_connections  4096;
}

http {
....

keepalive_timeout  2;
....
}
 

И я думал, что nginx должен был быть по крайней мере таким же мощным, так что я, должно быть, чего-то не делаю.

Комментарии:

1. Как выглядит ваша конфигурация lighttpd? Было бы интересно сравнить. Кроме того, поскольку lighttpd однопоточный, но вы используете двухъядерный — вы запускаете два lighttpd или обрабатываете 80 Мбит/с одним экземпляром?

2. Можете ли вы описать свой метод тестирования? Это может помочь.

3. Это чрезвычайно активный веб-сервер, который просто создает статические файлы. Lighttpd и nginx установлены вместе с yum на коробке centos 5. Оттуда довольно прямолинейно. Все контролируется с помощью munin и активных сеансов на балансировщике нагрузки. Коробка с nginx делает 50% того, что делает лайти

Ответ №1:

Когда вы перезагрузите свой nginx (kiil-HUP), вы получите что-то подобное в своих журналах ошибок

2008/10/01 03:57:26 [уведомление] 4563#0: получен сигнал 1 (SIGHUP), перенастройка
2008/10/01 03:57:26 [уведомление] 4563#0: перенастройка
2008/10/01 03:57:26 [уведомление] 4563#0: использование метода события "epoll"
2008/10/01 03:57:26 [уведомление] 4563#0: запуск рабочих процессов
2008/10/01 03:57:26 [уведомление] 4563#0: запуск рабочего процесса 3870

Для использования какого метода событий скомпилирован ваш nginx?

Вы ведете какой-либо учет доступа ? Подумайте о добавлении buffer=32k, что уменьшит разногласия по блокировке записи для файла журнала.

Подумайте о сокращении числа работников, это звучит нелогично, но работникам необходимо синхронизироваться друг с другом для системных вызовов, таких как accept(). Попробуйте сократить количество работников, в идеале я бы предложил 1.

Вы можете попробовать явно настроить буферы сокетов для чтения и записи в прослушивающем сокете, см. http://wiki.codemongers.com/NginxHttpCoreModule#listen

Ответ №2:

Возможно, lighttpd использует какое-то кэширование? Здесь есть отличная статья, в которой описывается, как настроить memcached с помощью nginx для повышения производительности на 400%.

Документ nginx для модуля memcached находится здесь.

Ответ №3:

Предложения: — Используйте 1 работника на процессор. — Проверьте различные настройки буфера nginx