Maison > Article > Opération et maintenance > Explication détaillée des paramètres de configuration à haute concurrence de nginx
1. De manière générale, les éléments suivants du fichier de configuration nginx sont plus efficaces pour l'optimisation :
1. worker_processes 8 ;
Il est recommandé de spécifier le nombre de processus nginx en fonction. au nombre de processeurs, généralement un multiple de celui-ci (par exemple, 2 processeurs quad-core comptent pour 8).
2. worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10000000 ;
Allouer le processeur à chaque processus. Dans l'exemple ci-dessus, 8 processus sont alloués. à 8 processeurs, vous pouvez bien sûr en écrire plus, ou Distribuez un processus
sur plusieurs processeurs.
3. worker_rlimit_nofile65535;
Cette commande fait référence au nombre maximum de descripteurs de fichiers ouverts par un processus nginx. La valeur théorique doit être le nombre maximum de fichiers ouverts (ulimit -n) et nginx. Le nombre de processus est divisé, mais nginx n'attribue pas les requêtes de manière aussi uniforme, il est donc préférable de garder la valeur cohérente avec ulimit -n.
Cela est dû au fait que l'allocation des requêtes aux processus lors de la planification nginx n'est pas aussi équilibrée, donc si vous remplissez 10240 et que la simultanéité totale atteint 30 000 à 40 000, le nombre de processus peut dépasser 10 240 et une erreur 502 sera restitué.
Sélectionnez et interrogez l'appartenance au modèle d'événement standard Si le courant existe. plus de méthode efficace dans le système, nginx choisira select ou poll
B) Modèle d'événement efficace
Kqueue : utilisé dans FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 et MacOS X. MacOS utilisant le système X à double processeur l'utilisation de kqueue peut provoquer un crash du noyau.
Epoll : utilisé dans les systèmes du noyau Linux version 2.6 et ultérieures.
Le nombre maximum de sockets TCP dans le système qui ne sont associés à aucun descripteur de fichier utilisateur. Si ce nombre est dépassé, la connexion orpheline sera immédiatement réinitialisée et un message d'avertissement sera imprimé. Cette limite sert uniquement à empêcher les attaques DoS simples. Vous ne pouvez pas trop vous y fier ou réduire artificiellement cette valeur. Vous devez augmenter cette valeur (si vous augmentez la mémoire).
net.ipv4.tcp_max_syn_backlog = 262144
La valeur maximale enregistrée pour les demandes de connexion n'ayant pas encore reçu d'accusé de réception du client. Pour les systèmes dotés de 128 Mo de mémoire, la valeur par défaut est 1 024 et pour les systèmes dotés de petite mémoire, elle est de 128.
net.ipv4.tcp_timestamps = 0
Les horodatages peuvent éviter le retour à la ligne des numéros de séquence. Une liaison à 1 Gbit/s rencontrera certainement des numéros de séquence qui ont été utilisés auparavant. L'horodatage permet au noyau d'accepter de tels paquets « anormaux ». Il doit être désactivé ici.
net.ipv4.tcp_synack_retries = 1
Afin d'ouvrir une connexion avec le homologue, le noyau doit envoyer un SYN avec un ACK en réponse au SYN précédent. Il s’agit de la deuxième poignée de main de la soi-disant poignée de main à trois. Ce paramètre détermine le nombre de paquets SYN+ACK envoyés avant que le noyau n'abandonne la connexion.
net.ipv4.tcp_syn_retries = 1
Le nombre de paquets SYN à envoyer avant que le noyau n'abandonne l'établissement de la connexion.
net.ipv4.tcp_fin_timeout = 1
Si le socket doit être fermé par l'extrémité locale, ce paramètre détermine combien de temps il reste dans l'état FIN-WAIT-2. L'homologue peut commettre des erreurs et ne jamais fermer la connexion, voire même planter de manière inattendue. La valeur par défaut est de 60 secondes. 2.2 La valeur habituelle pour le noyau est de 180 secondes. 3 Vous pouvez appuyer sur ce paramètre, mais rappelez-vous que même si votre machine est un serveur WEB peu chargé, il existe un risque de débordement de mémoire dû à un grand nombre de sockets morts - FIN -. WAIT-2 est moins dangereux que FIN-WAIT-1 car il ne peut consommer que jusqu'à 1,5 Ko de mémoire, mais sa durée de vie est plus longue.
net.ipv4.tcp_keepalive_time = 30
Lorsque keepalive est activé, la fréquence à laquelle TCP envoie des messages keepalive. La valeur par défaut est de 2 heures.
3. Un paramètre complet d'optimisation du noyau est publié ci-dessous :
vi /etc/sysctl.conf Dans CentOS5.5, tout le contenu peut être effacé et directement remplacé par le contenu suivant :
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.t cp_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_ arriéré = 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_s ynack_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 927000000
net.ip v4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
/sbin /sysctl -p
au nofile local 65535
* hard nofile 65535
* soft nproc 65535
Lequel utiliser ? La première méthode n'a aucun effet dans CentOS. Utilisez la troisième méthode. Elle est efficace, et la deuxième méthode est efficace dans Debian
# ulimit -n
65535
. # ulimit -u
65535
Remarque : La commande ulimit elle-même a des paramètres doux et durs. Ajoutez -H pour dur, ajoutez -S pour doux. est une limite souple
la limite souple fait référence à la valeur de réglage efficace actuelle du système. La valeur limite stricte peut être abaissée par les utilisateurs ordinaires. Mais il ne peut pas être augmenté. La limite souple ne peut pas être supérieure à la limite stricte. Seul l'utilisateur root peut augmenter la valeur de la limite stricte.
5. Ce qui suit est un simple fichier de configuration nginx :
utilisateur www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 0001000000100000
01000000;
error_log /www/log/ng inx_error.log crit;
pid /usr/local/ nginx/nginx.pid;
worker_rlimit_nofile 204800;
events
{
utiliser epoll;
worker_connections 204800;
}
http
{
inclure le mime. types;
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;
s fichier de fin activé ;
tcp_nopush activé;
keepalive_timeout 60;
fastcgi_cache_path /usr/local/nginx/fastcgi_cachelevels=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 timeout d'erreur invalid_headerhttp_500;
open_file_cache max=204800 inactive=20s;
open_file_cache_min_uses 1;
open_file_cache_valid 30s;
tcp_nodelay activé;
gzip activé;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/ application simple/x -javascript text/cssapplication/xml;
gzip_vary on;
serveur
{
écouter 8080;
nom_serveur backup.aiju.com;
index index.php index.htm;
root /www/html/;
emplacement /status
{
stub_status sur;
>
emplacement ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
emplacement ~ .*.(gif|jpg|jpeg|png|bmp|swf|js |css)$
{
expire 30j;
}
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_read _timeout 300;
接收FastCGI 应答的超时时间,这个值是指
fastcgi_buffer_size 4k;
指定读取FastCGI应答第一一般第一部分应答不会超过1k ,由于页面大小为4k,所以这里设置为4k。
fastcgi_buffers 8 4k;
指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答。
fastcgi_busy_buffers_size 8k; temp_file_write_size 8k;
avec fastcgi_temp_path Il s'agit d'un test fastcgi_buffers.
fastcgi_cache TEST
FastCGI一个名称。个人感觉开启缓存非常有用,可以有效降低CPU 负载,并且防止502 错误。
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;fastcgi_cache_valid any 1m;
为指定的应答代码指定缓存时间,如上例中将200,302 应答缓存一小时,301 应答缓存1 天,其他为1 分钟。
fastcgi_cache_min_uses 1;
缓存在fastc gi_cache_path est inactif et contient des fichiers inactifs.
fastcgi_cache_use_stale error timeout invalid_header http_500;
不知道这个参数的作用,猜想Le logiciel nginx est également disponible pour les applications FastCGI et FastCGI. Il s'agit d'une application php-fpm qui utilise FastCGI et d'une application Web.值:
同时处理的并发请求数,即它将开启最多60 个子线程来处理并发连接。
最多打开文件数。
每个进程在重置之前能够执行的最多请求数。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!