13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

Nginx在高并发下的性能优化点!有这篇就够了!

本篇,我们则来讲讲Nginx的几种性能优化方式

创新互联公司专注于利通企业网站建设,成都响应式网站建设公司,成都做商城网站。利通网站建设公司,为利通等地区提供建站服务。全流程按需网站设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务

目录[-]

1、Nginx运行工作进程数量

Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l。

 
 
 
 
  1. [root@lx~]# vi/usr/local/nginx1.10/conf/nginx.conf 
  2. worker_processes 4; 
  3. [root@lx~]# /usr/local/nginx1.10/sbin/nginx-s reload 
  4. [root@lx~]# ps -aux | grep nginx |grep -v grep 
  5. root 9834 0.0 0.0 47556 1948 ?     Ss 22:36 0:00 nginx: master processnginx 
  6. www 10135 0.0 0.0 50088 2004 ?       S   22:58 0:00 nginx: worker process 
  7. www 10136 0.0 0.0 50088 2004 ?       S   22:58 0:00 nginx: worker process 
  8. www 10137 0.0 0.0 50088 2004 ?       S   22:58 0:00 nginx: worker process 
  9. www 10138 0.0 0.0 50088 2004 ?       S   22:58 0:00 nginx: worker process 

2、Nginx运行CPU亲和力

比如4核配置:

 
 
 
 
  1. worker_processes 4; 
  2. worker_cpu_affinity 0001 0010 0100 1000 

比如8核配置:

 
 
 
 
  1. worker_processes 8; 
  2. worker_cpu_affinity 00000001 00000010 00000100 0000100000010000 00100000 01000000 10000000; 

worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。

3、Nginx最大打开文件数

 
 
 
 
  1. worker_rlimit_nofile 65535; 

这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。

注:文件资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。

 
 
 
 
  1. *   soft nofile   65535 
  2. *   hard nofile   65535 

用户重新登录生效(ulimit -n)

4、Nginx事件处理模型

 
 
 
 
  1. events { 
  2.   use epoll; 
  3.   worker_connections 65535; 
  4.   multi_accept on; 

nginx采用epoll事件模型,处理效率高。

work_connections是单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections。

实际我们填入一个65535,足够了,这些都算并发值,一个网站的并发达到这么大的数量,也算一个大站了!

multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接,默认是on,设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。

5、开启高效传输模式

 
 
 
 
  1. http { 
  2.   include mime.types; 
  3.   default_type application/octet-stream; 
  4.   …… 
  5.  
  6.   sendfile on; 
  7.   tcp_nopush on; 
  8.   …… 

6、连接超时时间

主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的。

 
 
 
 
  1. keepalive_timeout 60; 
  2. tcp_nodelay on; 
  3. client_header_buffer_size 4k; 
  4. open_file_cache max=102400 inactive=20s; 
  5. open_file_cache_valid 30s; 
  6. open_file_cache_min_uses 1; 
  7. client_header_timeout 15; 
  8. client_body_timeout 15; 
  9. reset_timedout_connection on; 
  10. send_timeout 15; 
  11. server_tokens off; 
  12. client_max_body_size 10m; 
 

7、fastcgi 调优

 
 
 
 
  1. fastcgi_connect_timeout 600; 
  2. fastcgi_send_timeout 600; 
  3. fastcgi_read_timeout 600; 
  4. fastcgi_buffer_size 64k; 
  5. fastcgi_buffers 4 64k; 
  6. fastcgi_busy_buffers_size 128k; 
  7. fastcgi_temp_file_write_size 128k; 
  8. fastcgi_temp_path/usr/local/nginx1.10/nginx_tmp; 
  9. fastcgi_intercept_errors on; 
  10. fastcgi_cache_path/usr/local/nginx1.10/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128minactive=1d max_size=10g; 

总结:

nginx的缓存功能有:proxy_cache / fastcgi_cache

8、gzip 调优

使用gzip压缩功能,可能为我们节约带宽,加快传输速度,有更好的体验,也为我们节约成本,所以说这是一个重点。

Nginx启用压缩功能需要你来ngx_http_gzip_module模块,apache使用的是mod_deflate。

一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash什么的不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的!

 
 
 
 
  1. gzip on; 
  2. gzip_min_length 2k; 
  3. gzip_buffers   4 32k; 
  4. gzip_http_version 1.1; 
  5. gzip_comp_level 6; 
  6. gzip_typestext/plain text/css text/javascriptapplication/json application/javascript application/x-javascriptapplication/xml; 
  7. gzip_vary on; 
  8. gzip_proxied any; 
  9. gzip on;   #开启压缩功能 
 

9、expires 缓存调优

缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的拓展名列出来, Expires缓存配置在server字段里面。

 
 
 
 
  1. location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ { 
  2. expires 30d; 
  3. #log_not_found off; 
  4. access_log off; 
  5.  
  6. location ~* \.(js|css)$ { 
  7. expires 7d; 
  8. log_not_found off; 
  9. access_log off; 

注:log_not_found off;是否在error_log中记录不存在的错误。默认是。

总结:

expire功能优点:

expire功能缺点:

解决办法:第一个缩短缓存时间,例如:1天,但不彻底,除非更新频率大于1天;第二个对缓存的对象改名。

网站不希望被缓存的内容:

10、防盗链

防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法由几种:

  1. 水印,品牌宣传,你的带宽,服务器足够;
  2. 防火墙,直接控制,前提是你知道IP来源;
  3. 防盗链策略下面的方法是直接给予404的错误提示。
 
 
 
 
  1. location ~*^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { 
  2. valid_referers noneblocked www.benet.com benet.com; 
  3. if($invalid_referer) { 
  4.   #return 302 http://www.benet.com/img/nolink.jpg; 
  5.   return 404; 
  6.   break; 
  7. access_log off; 

参数可以使如下形式:

11、内核参数优化

下面贴一个完整的内核优化设置:

 
 
 
 
  1. fs.file-max = 999999 
  2. net.ipv4.ip_forward = 0 
  3. net.ipv4.conf.default.rp_filter = 1 
  4. net.ipv4.conf.default.accept_source_route = 0 
  5. kernel.sysrq = 0 
  6. kernel.core_uses_pid = 1 
  7. net.ipv4.tcp_syncookies = 1 
  8. kernel.msgmnb = 65536 
  9. kernel.msgmax = 65536 
  10. kernel.shmmax = 68719476736 
  11. kernel.shmall = 4294967296 
  12. net.ipv4.tcp_max_tw_buckets = 6000 
  13. net.ipv4.tcp_sack = 1 
  14. net.ipv4.tcp_window_scaling = 1 
  15. net.ipv4.tcp_rmem = 10240 87380 12582912 
  16. net.ipv4.tcp_wmem = 10240 87380 12582912 
  17. net.core.wmem_default = 8388608 
  18. net.core.rmem_default = 8388608 
  19. net.core.rmem_max = 16777216 
  20. net.core.wmem_max = 16777216 
  21. net.core.netdev_max_backlog = 262144 
  22. net.core.somaxconn = 40960 
  23. net.ipv4.tcp_max_orphans = 3276800 
  24. net.ipv4.tcp_max_syn_backlog = 262144 
  25. net.ipv4.tcp_timestamps = 0 
  26. net.ipv4.tcp_synack_retries = 1 
  27. net.ipv4.tcp_syn_retries = 1 
  28. net.ipv4.tcp_tw_recycle = 1 
  29. net.ipv4.tcp_tw_reuse = 1 
  30. net.ipv4.tcp_mem = 94500000 915000000 927000000 
  31. net.ipv4.tcp_fin_timeout = 1 
  32. net.ipv4.tcp_keepalive_time = 30 
  33. net.ipv4.ip_local_port_range = 1024 65000 

执行sysctl -p使内核修改生效。

12、关于系统连接数的优化

linux 默认值 open files为1024。查看当前系统值:

 
 
 
 
  1. # ulimit -n 
  2. 1024 

说明server只允许同时打开1024个文件。

使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。

新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大,在/etc/security/limits.conf最后增加:

 
 
 
 
  1. *       soft    nofile         65535 
  2. *       hard    nofile         65535 
  3. *       soft    noproc         65535 
  4. *       hard    noproc         65535 

文章标题:Nginx在高并发下的性能优化点!有这篇就够了!
文章地址:http://cdbrznjsb.com/article/djopdgc.html

其他资讯

让你的专属顾问为你服务