Настройка Nginx / CentOS для сервера много статического контента - PullRequest
3 голосов
/ 29 января 2011

У меня Linux-машина 64 бит (centos5.5), 2.83 ГГц Q9550, 6 Гб оперативной памяти и один диск SATA 500 Гб.

С этой машины я работаю только с миниатюрами, размером около 10 КБ, и на данный момент на сервере около 7 миллионов миниатюр. У меня есть настройки в папке / 25/25/25/25, которая была рекомендована мной.

В среднем отчет о состоянии nginx показывает, что я обслуживаю от 300 до 400 активных соединений.

Пример:

Active connections: 297 
server accepts handled requests
 1975808 1975808 3457352 
Reading: 39 Writing: 8 Waiting: 250 

Теперь проблема в том, что этой машине очень тяжело, и она работает медленнее, так как мой сайт становится все более загруженным. Нагрузка всегда около 8 до 9.

Я заметил, что iostat показывает более 100% использования.

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.20     1.40 99.80 31.14  1221.56   255.49    11.28   114.14  831.81   7.62  99.84

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.20     0.60 100.80 24.00  1192.00   203.20    11.18   113.77  775.42   8.02 100.04

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.20   314.80 44.80 130.00   598.40  3547.20    23.72   113.76  937.18   5.72 100.02

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     5.40 56.20 110.80   660.80   937.60     9.57   112.37  518.01   5.99 100.04

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.60    12.40 82.80 41.60  1008.00   432.00    11.58   113.66  852.51   8.04 100.04

Ниже вы можете увидеть некоторые из моих настроек конфигурации nginx:

worker_processes  6;
worker_connections  4096;

http {
        include                 mime.types;
        default_type            application/octet-stream;
        #access_log             logs/access.log  main;
        sendfile                on;
        #tcp_nopush             on;
        keepalive_timeout       4;
        gzip                    on;
        gzip_http_version       1.1;
        gzip_vary               on;
        gzip_comp_level         2;
        gzip_proxied            any;
        gzip_types              text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        gzip_buffers            16 8k;
}

Мой вопрос, помимо перехода к настройкам RAID и, возможно, к SSD, есть ли что-нибудь, что я могу настроить / настроить, чтобы получить больше от этой машины? У меня такое ощущение, что такой сервер, как мой, должен обрабатывать гораздо больше, чем примерно от 300 до 400 активных соединений nginx в секунду.

Ответы [ 2 ]

13 голосов
/ 01 февраля 2011

Наряду с упомянутой опцией noatime @nos вы можете рассмотреть следующее:

  • в nginx, установите access_log off; - комментирование ничего не дает; вам нужно его активно отключить.
  • уменьшить количество рабочих процессов. Для nginx не требуется более одного работника на процессор.
  • tcp_nodelay on; поможет nginx быстрее обслуживать файлы при "живых" соединениях.
  • попробуйте поиграть с tcp_nopush. Я нашел, что это лучше всего включить, но YMMV.
  • установить if_modified_since на before; это позволит nginx отправлять 304 Not Modified заголовки вместо повторного предоставления содержимого.
  • играть с настройками open_file_cache
  • уменьшить send_timeout, чтобы nginx мог освободить устаревшие клиентские соединения.

Что касается остальной части вашей системы:

  • hdparam настроек. множество учебников, которые помогут вам в сети, настройки hdparam помогут вам извлечь максимум пользы из ваших дисков.
  • настроить ваши socket настройки производительности
  • перекомпилировать ядро ​​с уменьшенной частотой таймера. по умолчанию это 1000 Гц , что отлично подходит для настольных компьютеров, предоставляющих видео, но не слишком хорошо для серверов, где значение 100-250 может быть более подходящим
  • отключить службы, такие как чашки и Bluetooth

Однако я считаю, что лучшим приростом производительности было бы размещение Varnish перед вашим сервером nginx и использование его вместо nginx для обслуживания статических файлов. Он будет хранить «горячие» файлы в памяти лучше, чем может nginx, так что для вашего наиболее часто обслуживаемого контента практически нет использования диска.

Главное, однако, следить за ВСЕМ - не двигайтесь, знаете , что делает ваш сервер и где ваши узкие места.

0 голосов
/ 10 февраля 2011

Сколько из 7 миллионов файлов часто посещаются? Если вы посмотрите на 10 КБ за штуку, вы сможете хранить не более 500 000 файлов в кеше файловой системы максимум, оставляя 1 ГБ ОЗУ для работающих программ и буферов файловой системы (в которых хранится информация каталога).

Если вы не можете увеличить объем ОЗУ для хранения часто используемых файлов, вам потребуется более быстрая настройка диска с меньшей задержкой. Переход на диск емкостью 15 КБ удвоит емкость дискового ввода-вывода, но переход на SSD-диск - лучший выбор для вашей ситуации.

...