Explication détaillée des paramètres de configuration à haute concurrence de nginx

巴扎黑
Libérer: 2017-08-23 15:25:58
original
2997 Les gens l'ont consulté

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.

Maintenant, le nombre de fichiers ouverts sous le noyau Linux 2.6 est de 65 535, et worker_rlimit_nofile doit être renseigné avec 65 535 en conséquence.


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é.

Comment afficher le descripteur de fichier système Linux :

[root@web001 ~]# sysctl -a | grep fs.file

fs.file-max = 789972

fs.file-nr = 510 0 789972

4. useepoll;

Utiliser le modèle d'E/S d'epoll

(

Supplémentaire explication :

Semblable à Apache, nginx a différents modèles d'événements pour différents systèmes d'exploitation

A) Modèle d'événement standard

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.


/dev/poll : utilisé dans Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ et Tru64 UNIX 5.1A+.


Eventport : utilisé sur Solaris 10. Afin d'éviter les crashs du noyau, il est nécessaire d'installer des correctifs de sécurité.

)

5. worker_connections65535;

Le nombre maximum de connexions autorisées par processus Théoriquement, le nombre maximum de connexions par serveur nginx est worker_processes*worker_connections.

6. keepalive_timeout60;

délai d'expiration keepalive.

7. client_header_buffer_size4k;

La taille du tampon de l'en-tête de requête client Cela peut être défini en fonction de la taille de la pagination de votre système. Généralement, la taille d'un en-tête de requête ne dépassera pas 1 Ko, mais en raison de Généralement, la pagination du système est supérieure à 1 Ko, donc la taille de la pagination est définie ici.

La taille de la pagination peut être obtenue avec la commande getconf PAGESIZE.

[root@web001 ~]# getconf PAGESIZE

4096

Mais il existe également des cas où client_header_buffer_size dépasse 4k, mais la valeur client_header_buffer_size doit être définie sur l'ensemble du "système taille de pagination" multiple.

8. open_file_cachemax=65535 inactive=60s;

Ceci spécifiera le cache pour les fichiers ouverts. Il n'est pas activé par défaut et spécifie le nombre de caches. avec le nombre de fichiers ouverts. Inactif fait référence à la durée pendant laquelle le fichier n'a pas été demandé avant la suppression du cache.

9. open_file_cache_valid80s;

Cela fait référence à la fréquence à laquelle vérifier les informations valides mises en cache.

10. open_file_cache_min_uses1;

Le nombre minimum d'utilisations du fichier dans le paramètre inactif de la commande open_file_cache Si ce nombre est dépassé, le descripteur de fichier est toujours ouvert dans le cache, comme. dans l'exemple ci-dessus, si un fichier n'est pas utilisé pendant la période d'inactivité, il sera supprimé.

2. Concernant l'optimisation des paramètres du noyau :

net.ipv4.tcp_max_tw_buckets = 6000

Le nombre de timewait, la valeur par défaut est 180000.

net.ipv4.ip_local_port_range = 1024 65000

La plage de ports que le système est autorisé à ouvrir.

net.ipv4.tcp_tw_recycle = 1

Activer le recyclage rapide timewait.

net.ipv4.tcp_tw_reuse = 1

Activer la réutilisation. Permet de réutiliser les sockets TIME-WAIT pour de nouvelles connexions TCP.

net.ipv4.tcp_syncookies = 1

Activer les cookies SYN Lorsque la file d'attente SYN déborde, activez les cookies pour le gérer.

net.core.somaxconn = 262144

Le backlog de la fonction d'écoute dans l'application web limitera le net.core.somaxconn de nos paramètres du noyau à 128 par défaut, tandis que le NGX_LISTEN_BACKLOG défini par nginx, la valeur par défaut est 511 , il est donc nécessaire d'ajuster cette valeur.

net.core.netdev_max_backlog = 262144

Le nombre maximum de paquets autorisés à être mis en file d'attente lorsque chaque interface réseau reçoit des paquets plus rapidement que le noyau ne peut les traiter.

net.ipv4.tcp_max_orphans = 262144

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

Pour que la configuration prenne effet immédiatement, utilisez la commande suivante :

/sbin /sysctl -p

Quatre. Ce qui suit concerne l'optimisation du nombre de connexions système

La valeur par défaut des fichiers ouverts et du nombre maximal de processus utilisateur sous Linux est de 1024

. #ulimit -n

1024

#ulimit –u

1024

Description du problème : le serveur de description permet uniquement d'ouvrir 1024 fichiers en même temps et gère 1024 processus utilisateur

Utilisez ulimit -a pour afficher le système actuel. Toutes les valeurs limites, utilisez ulimit -n pour afficher le nombre maximum actuel de fichiers ouverts.

Le Linux nouvellement installé n'en a que 1024 par défaut. Lorsqu'il est utilisé comme serveur avec une charge importante, il est facile de rencontrer une erreur : trop de fichiers ouverts. Il faut donc l’agrandir.

Solution :

Utilisez ulimit –n 65535 pour le modifier immédiatement, mais il sera invalide après le redémarrage. (Notez que ulimit -SHn 65535 est équivalent à ulimit-n 65535, -S fait référence à soft et -H fait référence à hard)

a les trois méthodes de modification suivantes :

1 In. /etc/rc. Ajoutez une ligne ulimit -SHn 65535

au nofile local 65535
* hard nofile 65535
* soft nproc 65535

* hard 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

同时处理的并发请求数,即它将开启最多60 个子线程来处理并发连接。

102400

最多打开文件数。

204800

每个进程在重置之前能够执行的最多请求数。

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal