Подробная оптимизация Nginx

Файл конфигурации общей Nginx имеет большее влияние на оптимизации следующих пунктов:

1. worker_processes 8;

Nginx число процессов, рекомендуется, чтобы указать число последующих CPU, который обычно представляет собой несколько (например, два четыре ядра процессора в терминах 8).

2. worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

Каждый процесс назначается процессор, пример 8 в процессе назначенного 8 CPU, конечно, можно было бы написать, или
процесс дозирующего к множеству процессора.

3. worker_rlimit_nofile 65535; 

Это означает , что , когда команда Nginx процесс открывает количество дескрипторов файлов, теоретическое значение должно быть открыто пакетный
номер (ULIMIT -n) , деленный на числе процесса Nginx членов, но запрос Nginx распределения не столь однороден, и поэтому лучше всего ULIMIT -n последовательное значение.

Теперь откройте файл, открытый в Linux 2.6 ядра числа 65535, worker_rlimit_nofile вы должны заполнить соответствующую 65535.

Это происходит потому, что запрос выделения Nginx отправляется в процессе не настолько сбалансирована, так что если вы заполняете 10240, общее количество достигло 3-4 млн одновременного процесса, когда может быть больше, чем 10240, а затем возвращает ошибку 502.

Метод проверки системы Linux файловых дескрипторов:

[Корень @ web001 ~] # Sysctl -a | Grep fs.file

fs.file-макс = 789972

fs.file-Nr = 510 0 789972

4. Использование Epoll; 

Epoll с использованием модели ввода / вывода

(

Дополнительная информация:

И похож апач, Nginx для различных операционных систем, различные модели событий

A) Стандартная модель событий
Select, опрашивать событие относится к стандартной модели, эта система более эффективна , если текущий метод не существует, выберите или выбрать Nginx опрос
B) Эффективная модель событий 
Kqueue: используется в FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 и MacOS X. MacOS X с использованием системы двойного процессора с использованием Kqueue может вызвать панику ядра.
Epoll:  Используйте систему Linux с ядром версии 2.6 и более поздних версий.

 

/ Dev / опрос: используемый в Solaris 7 11/99 +, HP / UX 11.22+ (eventport), IRIX 6.5.15+ и Tru64 Unix 5.1A +.

Eventport: Используйте для Solaris 10. Для того, чтобы избежать проблем возникает, паника ядра, необходимо установить патчи безопасности.

)

5. worker_connections 65535; 

Максимальное количество соединений на один процесс максимального числа соединений, разрешенных, в теории, каждый сервер Nginx worker_processes * worker_connections.

6. keepalive_timeout 60; 

KeepAlive тайм-аут.

7 . client_header_buffer_size 4k; 

Запрос клиента размер буфера головы, это может быть установлен в соответствии с размером вашей системы подкачки, как правило, запрос не превышает размер головки 1k, но в связи с общей системой подкачки должен быть больше, чем 1k, поэтому здесь устанавливается размер страницы.

Размер страницы можно заказать getconf PAGESIZE  сделал.

[Корень @ web001 ~] # getconf PAGESIZE

4096

Но client_header_buffer_size превышает 4k, но client_header_buffer_size это значение должно быть установлено значение «размер системы страницы» целым кратным.

8 . open_file_cache макс = 65535 неактивные = 60; 

Это позволит открыть указанный файл кэш не включено по умолчанию, макс указать число буферов, рекомендации и открыть такое же количество файлов, неактивный относится удалить кэш-файлы после того, как много времени не было предложено.

9 . open_file_cache_valid 80s; 

Это относится к тому, как долго кэшу проверки достоверной информации.

10 . open_file_cache_min_uses 1; 

При условии, с минимальным неактивным временем номером файл параметр инструкции open_file_cache, если это число будет превышено, то дескриптор файла был открыт в кэше, в приведенном выше примере, если файл не был использован в течение времени бездействует, он будет смещаться Кроме того.

 

Во-вторых, по оптимизации параметров ядра:

net.ipv4.tcp_max_tw_buckets = 6000

Timewait номер, по умолчанию 180000.

net.ipv4.ip_local_port_range = 1024 65000

Разрешенные порты для открытых систем.

net.ipv4.tcp_tw_recycle = 1

Timewait обеспечивают быстрое восстановление.

net.ipv4.tcp_tw_reuse = 1

Открыть повторное использование. TIME-WAIT розетки позволяют повторно использовать для нового соединения TCP.

net.ipv4.tcp_syncookies = 1

Открыть SYN Cookies, когда происходит переполнение очереди SYN, включите куки, чтобы иметь дело с.

net.core.somaxconn = 262144

веб-приложения для прослушивания функция Отставание по умолчанию ядро ​​даст нам от параметров net.core.somaxconn предел до 128, но Nginx по умолчанию определяется NGX_LISTEN_BACKLOG 511, необходимо изменить это значение.

net.core.netdev_max_backlog = 262144

Когда скорость каждого быстрого сетевого интерфейса для приема пакетов из этой скорости передачи пакетов, чем процессорные ядра, максимально допустимое количество пакетов в очередь.

net.ipv4.tcp_max_orphans = 262144

Система до количества TCP сокетов, не связаны с какой-либо файл пользователя ручкой. Если это число превышено, соединение будет немедленно сбрасывается сирота и выводит предупреждающее сообщение. Это ограничение только для предотвращения атак типа DoS простых, не может полагаться на это слишком много или искусственно уменьшить это значение должно увеличить это значение (если увеличение в памяти после того, как).

net.ipv4.tcp_max_syn_backlog = 262144

Те, максимальный клиент не получил подтверждение информации запроса соединения записанном. Ибо 128M систем памяти, значение по умолчанию равно 1024, небольшая системная память 128.

net.ipv4.tcp_timestamps = 0

Время порядковый номер штампа, чтобы избежать намотки. Ссылка 1Gbps обязательно столкнуться с ранее использовавшимся серийным номером. Отметка позволяет ядру принимать это «неправильные» пакеты. Здесь он должен быть выключен.

net.ipv4.tcp_synack_retries = 1

Для того, чтобы открыть конец соединения, ядро ​​должно послать SYN и SYN ответ снабжен передней частью ACK. То есть, так называемые три-рукопожатие во втором рукопожатия. Этот параметр определяет количество ядер SYN + ACK-пакеты передачи прерывается перед соединением.

net.ipv4.tcp_syn_retries = 1

При определении количества ядер сдавайтесь перед отправкой соединения SYN пакетов.

net.ipv4.tcp_fin_timeout = 1

Если сокет закрыт в конце претензии, этот параметр определяет время, которое остается в состоянии FIN-WAIT-2-х. Peer неправильно и никогда не может закрыть соединение, даже когда машина неожиданно. Значение по умолчанию составляет 60 секунд. 2,2 ядра, как правило, значение составляет 180 секунд, 3 вы можете нажать на эту установку, но помните, что даже если ваша машина легкая загрузка WEB-сервера, также находятся в опасности, потому что большое количество мертвых гнезд и переполнения памяти, FIN - риск WAIT-2'S FIN-WAIT-1 меньше, чем это, потому что он может есть только до 1.5K памяти, но их более длительной выживаемости.

net.ipv4.tcp_keepalive_time = 30

Когда только использование KeepAlive, частота передачи TCP от оставайся в живых сообщений. Значение по умолчанию составляет 2 часа.

 

В-третьих, размещены ниже полных параметров оптимизации ядра:

/etc/sysctl.conf VI  centos5.5 может опустошить содержимое всей прямой замены следующее:

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4. tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
нетто .ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 +927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000

Сделать конфигурация вступает в силу немедленно использовать команду:
/ SBIN / Sysctl -p

В-четвертых, ниже, чтобы оптимизировать количество соединений в системе

линукс открытые файлы и значения по умолчанию для пользователя макс процессов 1024

#ulimit -n

1024

С #ulimit

1024

Описание проблемы:  Описание сервер позволяет открыто только в 1024, имея дело с 1024 Процессом пользователя

Используйте ULIMIT -a можно просмотреть все текущие пределы системы, используя ULIMIT -n можно просмотреть текущее максимальное количество открытых файлов.

Недавно установлен Линукс по умолчанию только 1024, когда нагрузка в больших серверах, легко встретить ошибки: слишком много открытых файлов. Таким образом, это должно быть большое изменение.

Решение:

Используйте ULIMIT Cn 65535 доступны для немедленного изменения, но после перезагрузки недействителен. (Примечание ULIMIT -SHn 65535 эквивалентную ULIMIT -n 65535, -S относится к мягким, -H относится к трудно)

Есть три модификации:

1. Добавьте строку ULIMIT -SHn 65535 в /etc/rc.local
2. Увеличение / и т.д. / профиль линии ULIMIT -SHn 65535
3. В /etc/security/limits.conf  добавляемые в конце:

* Soft nofile 65535
* жесткий nofile 65535
* мягкий NPROC 65535
* жесткий NPROC 65535

В частности, использование которого, с использованием первого способа CentOS в отсутствии эффекта, использование трех способов эффективного , использование второго типа эффективными в Debian

# ULIMIT -n

65535

# ULIMIT -u

65535

Примечание: сама ULIMIT команда установила жесткие и мягкие очки, плюс -H трудно, добавьте -S мягкий дисплей по умолчанию является мягкий предел

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

 

V. Ниже приведен простой конфигурационный файл Nginx:

Пользователь WWW WWW;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000
01000000;
error_log /www/log/nginx_error.log крит;
PID /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;
события
{
использование Epoll;
worker_connections 204800;
}
HTTP
{
включают mime.types;
Применение default_type / октет-поток;
кодировка UTF-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8м;
SendFile на;
tcp_nopush на;
keepalive_timeout 60;
Уровни fastcgi_cache_path / USR / местные / Nginx / fastcgi_cache = 1: 2
keys_zone = ТЕСТ: 10m
неактивным = 5 м;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_buffers_size 8К;
fastcgi_temp_file_write_size 8К;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1 ч;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid любой 1м;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale тайм - аут ошибки invalid_header HTTP_500;
open_file_cache макс = 204800 неактивные = 20с;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nodelay на;
GZIP на;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1,0;
gzip_comp_level 2;
gzip_types текст / равнина применение / х-Javascript текст / CSS приложение / XML;
gzip_vary на;
Сервер
{
слушать 8080;
server_name backup.aiju.com;
Индекс index.php index.htm;
корень / WWW / HTML /;
Местонахождение / статус
{
stub_status на;
}
Место ~ * / (PHP | php5) $..?
{
Fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
включают в себя fcgi.conf;
}
Место ~ * / (GIF | JPG | JPEG | PNG | BMP | SWF | JS | CSS) $..
{
Истекает 30d;
}
доступ log_format '$ remote_addr - $ remote_user [$ time_local] „$ запрос“'
'статус $ $ body_bytes_sent „$ HTTP_REFERER“'
«» $ http_user_agent»$ HTTP_X_FORWARDED_FOR ';
access_log /www/log/access.log доступа;
}
}

В-шестых, несколько инструкций по FastCGI:

fastcgi_cache_path / USR / местные / Nginx / fastcgi_cache уровень = 1: 2 keys_zone = ТЕСТ: 10minactive = 5 м;

Эта директива указует путь для кэша FastCGI уровня структуры каталогов, ключевое региональное время хранения и время неактивности удаления.

fastcgi_connect_timeout 300;

Подключение к заднему концу указанного временного отказа от FastCGI.

fastcgi_send_timeout 300;

Запрос передачи FastCGI тайм-аута, то значение тайм-аута двухстороннее квитирование было завершено после того, как запрос на передачу FastCGI.

fastcgi_read_timeout 300;

Тайм-аут ответ FastCGI получен, это значение тайм-аут было завершено после получения FastCGI двусторонний ответа квитирования.

fastcgi_buffer_size 4k;

Чтение первой части ответа, указанный FastCGI столь необходимый буфер, как правило, не больше, чем первая часть 1k ответа, так как размер страницы 4k, поэтому здесь установлено в 4k.

fastcgi_buffers 8 4k;

Укажите, сколько и сколько локальные буферы используются для буфера ответа FastCGI.

fastcgi_busy_buffers_size 8К;

Эта команда, которую я не знаю, что делать с, просто знаю, что значение по умолчанию в два раза превышает fastcgi_buffers.

fastcgi_temp_file_write_size 8К;

Когда написание fastcgi_temp_path сколько блока данных, значение по умолчанию дважды fastcgi_buffers.

fastcgi_cache TEST

Кэш Open FastCGI и имя для своего развития. Личные чувства очень полезно открыть тайник, может эффективно снизить нагрузку на процессор и предотвратить 502 ошибок.

fastcgi_cache_valid 200 302 1 ч;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid любой 1м;

Ответ кода, указанный в течение указанного времени буфера, в варианте осуществления выше 200,302 один час ответа кэша-буфер ответа 301 один день, еще 1 минуты.

fastcgi_cache_min_uses 1;

Кэширование наименее используемый в fastcgi_cache_path неактивного значения команды параметра времени частоты в приведенном выше примере, если файл не был использован один раз в течение 5 минут, после чего этот файл будет удален.

fastcgi_cache_use_stale тайм-аут ошибки invalid_header HTTP_500;

Я не знаю, роль этого параметра, предположение должно быть, чтобы Nginx знать, какой тип кэша бесполезно. Выше в параметрах FastCGI связанных с Nginx, кроме того, сам FastCGI имеет некоторые конфигурации должен быть оптимизирован, если вы используете PHP-FPM для управления FastCGI, вы можете изменить следующие значения в файле конфигурации:

<Значение имени =»max_children»> 60 </ значение>

Одновременные запросы обрабатываются, то есть, она будет открыта до 60 суб-потоков для обработки одновременных соединений.

<Значение Name =»rlimit_files»> 102400 </ значение>

Максимальное количество открытых файлов.

<Значение Name =»max_requests»> 204800 </ значение>

Каждый процесс перед сбросом максимального числа запросов, которые могут быть выполнены.

Перепечатано в: https://www.cnblogs.com/yueminghai/p/8657861.html

Еще один стоит оптимизация и стресс - теста статья: https://blog.csdn.net/qq_30038111/article/details/79794377

рекомендация

отwww.cnblogs.com/jpinsz/p/10959046.html