On Tue, Nov 08, 2005 at 12:58:32PM +0300, Igor Sysoev wrote:
On Tue, 8 Nov 2005, Igor Sysoev wrote:
Судя по большому числу reading, есть ощущение, что nginx проводит время
в SSL handshake'ах. Что можно попробовать ? Во-первых, keep-alive,
а во-вторых оставить только один рабочий процесс, в этом случае сессии
SSL
будут лучше кэшироваться (nginx, в отличие от Апача, поддерживает
кэширование
сессий только внутри одного процесса).
Похоже это было оно, keep-alive не трогал, но оставил только
master-процесс. В пик видел 10% процессора на nginx, значительно лучше
чем было.
В смысле только master-процесс ? Должен работать только один worker.
Нужно или убрать директиву worker_processes (тогда по умолчанию будет
только одни worker), или явно указать "worker_processes 1".
То есть, должно выглядеть примерно так:
ps ax -o pid,ppid,%cpu,vsz,wchan,command|egrep '(nginx|PID)'
PID PPID %CPU VSZ WCHAN COMMAND
33272 37759 28.7 26864 - nginx: worker process (nginx)
37759 1 0.0 9528 pause nginx: master process /usr/local/nginx/nginx
Так и есть, один worker процесс. Прошу прощения, это я неточно
выразился.
Про keep-alive - спасибо, попробую. Но в целом, уменьшение worker'ов до
1-го - само по себе дало хороший эффект. Все же ssl handshake брали
свое, похоже.
А не планируется организация единого ssl кэша для всех worker'ов?
Планируется, но не сейчас. На самом деле, если nginx занимается
только проксированием, то одного воркера вполне досаточно.
Можно быстро добавить директиву для изменения времени кэширования -
сейчас 300 секунд.
Игорь Сысоев
http://sysoev.ru