Настройка Nginx/CentOS для сервера много статического контента
У меня 64-битная машина linux (centos5.5), Q9550 с тактовой частотой 2,83 ГГц, оперативная память 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 ответа
Вместе с 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, так что для вашего наиболее часто обслуживаемого контента мало места для использования.
Однако главное - следить за ВСЕМ - не поддавайтесь интуиции, знайте, что делает ваш сервер и где ваши узкие места.
Сколько из 7 миллионов файлов часто используется? Если вы посмотрите на 10 КБ за штуку, вы сможете хранить не более 500 000 файлов в кеше файловой системы максимум, оставляя 1 ГБ ОЗУ для запущенных программ и для буферов файловой системы (в которых хранится информация каталога).
Если вы не можете увеличить объем ОЗУ для хранения часто используемых файлов, вам потребуется более быстрая настройка диска с меньшей задержкой. Переход на диск 15K удвоит емкость дискового ввода-вывода, но переход на SSD-диск - лучший выбор для вашей ситуации.