Maison  >  Article  >  Opération et maintenance  >  partage de conseils d'optimisation des performances nginx

partage de conseils d'optimisation des performances nginx

王林
王林avant
2021-03-05 15:19:193408parcourir

partage de conseils d'optimisation des performances nginx

Cet article partage quelques conseils d'optimisation des performances de nginx pour tout le monde. C'est très pratique et j'espère qu'il pourra aider les amis dans le besoin.

1. Options de configuration très importantes pour l'optimisation des performances de nginx

1. worker_processes 8;

Il est recommandé de spécifier le nombre de processus nginx en fonction du nombre de processeurs, généralement son multiple (par exemple, 2 processeurs quad-core comptent pour 8).

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

Allouez le processeur à chaque processus. alloué à 8 CPU, vous pouvez bien sûr écrire plus de un, ou allouer un processus à plusieurs processeurs.

3. worker_rlimit_nofile 65535;

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 le nombre de processus nginx Divisez, mais nginx n'attribue pas les requêtes de manière aussi uniforme, il est donc préférable de le garder cohérent avec la valeur de 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 les descripteurs de fichiers système Linux :

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

                    fs.file-max = 789972

                    fs.file-nr = 510 0 789972

4. utilisez epoll ;

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

(Explication supplémentaire :

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électionner et interroger appartiennent au modèle d'événement standard Si le modèle d'événement actuel n'existe pas. méthode plus 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+, NetBSD 2.0 et MacOS X. Utilisé avec kqueue sur un système MacOS X à double processeur 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_connections 65535;

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

6. keepalive_timeout 60 ;

délai d'expiration keepalive.

7. client_header_buffer_size 4k ;

La taille du tampon de l'en-tête de requête client. Elle peut être définie 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 étant donné que la pagination générale du système est supérieure à 1 Ko, 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 des cas où client_header_buffer_size dépasse 4k, mais la valeur de client_header_buffer_size doit être définie sur un multiple entier de la "taille de pagination du système".

8. open_file_cache max=65535 inactive=60s;

Ceci spécifiera le cache pour les fichiers ouverts. Il n'est pas activé par défaut, il est recommandé de le faire. cohérent avec le nombre de fichiers ouverts inactifs Il 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_valid 80s ;

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

10. open_file_cache_min_uses 1;

Le nombre minimum d'utilisations du fichier pendant le temps de paramètre inactif de l'instruction open_file_cache Si ce nombre est dépassé, le descripteur de fichier sera toujours ouvert dans le. cache, comme dans l'exemple ci-dessus, si un fichier n'est pas utilisé une seule fois 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
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 sockets 重新用于新的TCP 连接。
net.ipv4.tcp_syncookies = 1
开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理。
net.core.somaxconn = 262144
web 应用中listen 函数的backlog 默认会给我们内核参数的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 状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,3你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些。
net.ipv4.tcp_keepalive_time = 30
当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时。

3. Un paramètre complet d'optimisation du noyau est publié ci-dessous :

#CentOS5.5中可以将所有内容清空直接替换为如下内容:
vi /etc/sysctl.conf 

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

(Partage vidéo d'apprentissage : vidéo php tutoriel )

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 Cu   
    1024
.

Description du problème :

Notez que le serveur n'autorise que l'ouverture de 1024 fichiers en même temps et gère 1024 processus utilisateur

Utilisez ulimit -a pour afficher toutes les valeurs limites de le système actuel et 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 :

L'utilisation d'ulimit Cn 65535 peut être modifiée immédiatement, mais elle 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 de ulimit -SHn 65535
à local Laquelle utiliser ? La première méthode n'a aucun effet dans CentOS, la troisième méthode a un effet et la deuxième méthode a un effet dans Debian

* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535

Remarque : la commande ulimit elle-même est divisée en paramètres logiciels et matériels, ajoutez -H pour dur, ajoutez -S pour doux, l'affichage par défaut est la limite douce

 soft 限制指的是当前系统生效的设置值。 hard 限制值可以被普通用户降低。但是不能增加。 soft 限制不能设置的比 hard 限制更高。 只有 root 用户才能够增加 hard 限制值。

五、下面是一个简单的nginx 配置文件:

user www www;
          worker_processes 8;
          worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
          error_log /www/log/nginx_error.log crit;
          pid /usr/local/nginx/nginx.pid;
          worker_rlimit_nofile 204800;
          events
     {
       use epoll;
       worker_connections 204800;
     }
     http
     {
       include 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;
       sendfile on;
       tcp_nopush on;
       keepalive_timeout 60;
       fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=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_header http_500;
       open_file_cache max=204800 inactive=20s;
       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 text/plain application/x-javascript text/css application/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_cache levels=1:2 keys_zone=TEST:10minactive=5m;
这个指令为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 8k;
这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffers 的两倍。
fastcgi_temp_file_write_size 8k;
在写入fastcgi_temp_path 时将用多大的数据块,默认值是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;
缓存在fastcgi_cache_path 指令inactive 参数值时间内的最少使用次数,如上例,如果在5 分钟内某文件1 次也没有被使用,那么这个文件将被移除。
fastcgi_cache_use_stale error timeout invalid_header http_500;
不知道这个参数的作用,猜想应该是让nginx 知道哪些类型的缓存是没用的。以上为nginx 中FastCGI 相关参数,另外,FastCGI 自身也有一些配置需要进行优化,如果你使用php-fpm 来管理FastCGI,可以修改配置文件中的以下值:
<value name=”max_children”>60</value>
同时处理的并发请求数,即它将开启最多60 个子线程来处理并发连接。
<value name=”rlimit_files”>102400</value>
最多打开文件数。
<value name=”max_requests”>204800</value>
每个进程在重置之前能够执行的最多请求数。

相关推荐:nginx教程

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer