Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Detaillierte Erläuterung der Nginx-Konfigurationsparameter für hohe Parallelität
1. Im Allgemeinen sind die folgenden Elemente in der Nginx-Konfigurationsdatei effektiver für die Optimierung:
1. worker_processes 8;
Es wird empfohlen, die Anzahl der Nginx-Prozesse entsprechend anzugeben zur Anzahl der CPUs, normalerweise ein Vielfaches davon (z. B. werden 2 Quad-Core-CPUs als 8 gezählt).
2. worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10000000;
Weisen Sie jedem Prozess CPU zu sind 8 CPUs zugeordnet, natürlich kann man auch mehr schreiben, oder Verteilen Sie einen
-Prozess auf mehrere CPUs.
3. worker_rlimit_nofile65535;
Dieser Befehl bezieht sich auf die maximale Anzahl der von einem Nginx-Prozess geöffneten Dateideskriptoren. Der theoretische Wert sollte die maximale Anzahl geöffneter Dateien (ulimit -n) und nginx sein Die Anzahl der Prozesse wird aufgeteilt, aber Nginx verteilt Anfragen nicht so gleichmäßig, daher ist es am besten, den Wert mit ulimit -n konsistent zu halten.
Das liegt daran, dass die Zuordnung von Anfragen zu Prozessen während der Nginx-Planung nicht so ausgewogen ist. Wenn Sie also 10240 eingeben und die Gesamtgleichzeitigkeit 30.000–40.000 erreicht, kann die Anzahl der Prozesse 10240 überschreiten und ein 502-Fehler auftreten wird zurückgegeben.
Auswahl und Abfrage gehören zum Standardereignismodell. Wenn das aktuelle vorhanden ist Keine effizientere Methode im System, Nginx wählt „Auswählen“ oder „Abfragen“
B) Effizientes Ereignismodell
Kqueue: Wird in FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 und MacOS X verwendet. MacOS verwendet X-System mit zwei Prozessoren Die Verwendung von kqueue kann zum Absturz des Kernels führen.
Epoll: Wird in Systemen mit Linux-Kernel Version 2.6 und höher verwendet.
Die maximale Anzahl von TCP-Sockets im System, die keinem Benutzerdatei-Handle zugeordnet sind. Wenn diese Zahl überschritten wird, wird die verwaiste Verbindung sofort zurückgesetzt und eine Warnmeldung ausgegeben. Diese Grenze dient nur der Verhinderung einfacher DoS-Angriffe. Sie können sich nicht zu sehr darauf verlassen oder diesen Wert künstlich verringern. Sie sollten diesen Wert erhöhen (wenn Sie den Speicher erhöhen).
net.ipv4.tcp_max_syn_backlog = 262144
Der maximale Wert, der für Verbindungsanfragen aufgezeichnet wurde, die noch keine Bestätigung vom Client erhalten haben. Für Systeme mit 128 MB Speicher ist der Standardwert 1024 und für Systeme mit kleinem Speicher 128.
net.ipv4.tcp_timestamps = 0
Zeitstempel können das Umbrechen von Sequenznummern vermeiden. Bei einer 1-Gbit/s-Verbindung werden Sie auf jeden Fall auf Sequenznummern stoßen, die bereits zuvor verwendet wurden. Der Zeitstempel ermöglicht es dem Kernel, solche „abnormalen“ Pakete zu akzeptieren. Es muss hier ausgeschaltet werden.
net.ipv4.tcp_synack_retries = 1
Um eine Verbindung zum Peer zu öffnen, muss der Kernel ein SYN mit einem ACK als Antwort auf das vorherige SYN senden. Dies ist der zweite Handschlag beim sogenannten Drei-Wege-Handschlag. Diese Einstellung bestimmt die Anzahl der SYN+ACK-Pakete, die der Kernel sendet, bevor die Verbindung aufgegeben wird.
net.ipv4.tcp_syn_retries = 1
Die Anzahl der zu sendenden SYN-Pakete, bevor der Kernel den Verbindungsaufbau aufgibt.
net.ipv4.tcp_fin_timeout = 1
Wenn der Socket vom lokalen Ende geschlossen werden soll, bestimmt dieser Parameter, wie lange er im FIN-WAIT-2-Zustand bleibt. Der Peer kann Fehler machen und die Verbindung niemals schließen oder sogar unerwartet abstürzen. Der Standardwert beträgt 60 Sekunden. 2.2 Der übliche Wert für den Kernel ist 180 Sekunden. Sie können diese Einstellung drücken, aber denken Sie daran, dass selbst wenn Ihr Computer ein leicht ausgelasteter WEB-Server ist, aufgrund einer großen Anzahl toter Sockets die Gefahr eines Speicherüberlaufs besteht. WAIT-2 ist weniger gefährlich als FIN-WAIT-1, da es nur bis zu 1,5 KB Speicher beanspruchen kann, aber ihre Lebensdauer ist länger.
net.ipv4.tcp_keepalive_time = 30
Wenn Keepalive aktiviert ist, die Häufigkeit, mit der TCP Keepalive-Nachrichten sendet. Der Standardwert beträgt 2 Stunden.
3. Eine vollständige Kernel-Optimierungseinstellung wird unten veröffentlicht:
vi /etc/sysctl.conf In CentOS5.5 können alle Inhalte gelöscht und direkt durch den folgenden Inhalt ersetzt werden:
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 =. 42949672 96
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.wmem_max = 16777216 net.Core.netdev_max_backlog =. 2 62144
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_ret ries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 0
net.ip v4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
/sbin /sysctl -p
zu local nofile 65535
* hard nofile 65535
* soft nproc 65535
hinzu ? Die erste Methode hat in CentOS keine Wirkung. Sie ist wirksam, und die zweite Methode ist in Debian wirksam
65535
# ulimit -u
65535
Hinweis: Der Befehl ulimit selbst verfügt über Soft- und Hard-Einstellungen und -S für Soft ist Soft-Limit
Soft-Limit bezieht sich auf den aktuellen System-Einstellwert. Der harte Grenzwert kann von normalen Benutzern gesenkt werden. Aber es kann nicht erhöht werden. Das Soft-Limit kann nicht höher eingestellt werden als das Hard-Limit. Nur der Root-Benutzer kann den harten Grenzwert erhöhen.
5. Das Folgende ist eine einfache Nginx-Konfigurationsdatei:
Benutzer www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 0001000000100000
01000000;
error_log. /www/log/n ginx_error.log crit;
pid /usr/local/ nginx/nginx.pid;
worker_rlimit_nofile 204800;
events
{
use epoll;
worker_connections 204800;
}
http
{
include mime. Typen;
default_type application/octet-stream;
charset utf-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_header_buffers 4 4k;
client_max_body_size 8m;
Datei senden an ;
tcp_nopush on;
keepalive_timeout 60;
fastcgi_cache_path /usr/local/nginx/fastcgi_cachelevel=1:2
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout 300 ;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 4k;
fastcgi_buffers 8 4k;
fastcgi_busy_buffers_size 8k;
fastcgi_temp_file_write_size 8k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_headerhttp_500;
open_file_cache max=204800. inactive=20 s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types Anwendung/x -javascript text/cssapplication/xml;
gzip_vary on;
server
{
listen 8080;
server_name backup.aiju.com;
index index.php index.htm;
root /www/html/;
location /status
{
stub_status on;
}
location ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|js |css)$
{
expires 30d;
}
log_format access '$remote_addr -- $remote_user [$time_local]"$request" '
'$status $body_bytes_sent "$http_referer " '
'"$http_user_agent" $http_x_forwarded_for';
access_log /www/log/access.log access;
}
}
六、关于FastCGI 的几个指令::
fastcgi_cache_path /usr/local/nginx/fastcgi_cachelevels=1:2keys_zone=TEST:10minactive=5m;
这个指令为FastCGI. 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间.
fastcgi_connect_timeout 300;
指定连接到后端FastCGI 的超时时间.
fastcgi_send_timeout 300;
向FastCGI FastCGI FastCGI FastCGI read_timeout 300;
接收FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI 应的超时时间.
fastcgi_buffer_size 4k;
指定读取FastCGI应答第一般第一部分应答不会超过,由于页面大小为4k,所以这里设置为4k。
fastcgi_buffers 8 4k;
指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答.
fastcgi_busy_buffers_size 8k;
这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers cgi_temp_file_write_size 8k;
在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers 的两倍.
fastcgi_cache TEST
开启FastCGI 缓存并且为其制定一个名称.个人感觉开启缓存非常有用, 可以有效降低CPU-Fehler: 502 Sekunden指定的应答代码指定缓存时间,如上例中将200, 302 应答缓存一小时, 301 应答缓存1 天, 其他为1 分钟.
fastcgi_cache_min_uses. 1;
缓存在fastcgi_cache_path ist nicht inaktiv.如上例,如果在5 分钟内某文件1次也没有被使用,那么这个文件将被移除.
fastcgi_cache_use_stale error timeout. invalid_head erhttp_500;
不知道这个参数的作用,猜想应该是让nginx 知道哪些类型的缓存是没用的.以上为nginx 中FastCGI相关参数, 另外, FastCGI 自身也有一些配置需要进行优化, 如果你使用php-fpm来管理FastCGI, 可以修改配置文件中的以下值:
同时处理的并发请求数,即它将开启最多60. 个子线程来处理并发连接.
最多打开文件数.
每个进程在重置之前能够执行的最多请求数.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Nginx-Konfigurationsparameter für hohe Parallelität. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!