Здравствуйте.
Недавно столкнулся с проблемой, есть Apache Tomcat 6, отдает страницы со
скоростью 5500 req/sec (100 параллельных клиентов)
Если перед ним поставить nginx на той же машине, то скорость падает до
2000 req/sec.
Получается nginx с proxy_pass более чем в 2 раза снижает скорость, мне
это кажется странным.
Так и должно быть?
в вашем тесте nginx выступает в роли доп. элемента, который только
замедляет работу (что и логично на таких скоростях.) Томкат весьма
хорошо все кеширует и отдает ответы из памяти быстро.
Так что есть большая вероятность, что в описанных вами условиямх так
может быть. Другой вопрос, получите ли вы выгоду в реальной работе от
применения nginx.
Чтобы быть обьективным, вы бы попробовали провести эксперимент другой
тестилкой, а также поставить на фронтенд apache и посмотреть результат
на нем.
Также следует иметь в виду, что в реальных сетях вы сможете обслуживать
maxProcessors\maxThreads клиентов томката, а nginx в этоже время
сможет обслуживать много больше медленных клиентов.
Еще nginx умеет прекрасно балансировать нагрузку и очень помогает
сдерживать небольшие частые ddos атаки. В этом большой плюс.
И еще одно: "Искусственные тесты дают искусственные результаты." В
реальности все может быть иначе.
Крутил различные параметры конфига nginx - не помогает. В error.log
ошибок при бенчмарке не появляется. Бенчмарк запускается по 100 Mb сети с
другой машины, в сеть не упирается.
Бенчмарк вызывается следующей коммандой: httperf --server 192.168.0.10 --port
80 --uri / --num-conn 100 --num-call 100 --rate 100 --timeout 5
Машинка: AMD Athlon 64 X2 Dual Core Processor 5200+, 2Gb RAM
nginx.conf:
user nobody;
worker_processes 3;
worker_rlimit_core 2000M;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 50000;
use epoll;
}
http {
server_names_hash_max_size 10000;
server_names_hash_bucket_size 256;
client_max_body_size 5m;
log_format IP '$remote_addr';
server_tokens off;
reset_timedout_connection on;
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 70;