嵌入式技术论坛
直播中

氧化

7年用户 749经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[经验]

Linux运维Nginx软件优化之Nginx性能优化

1. 优化nginx worker进行个数

nginx服务主要有两个重要进程:
01) master进程:可以控制nginx服务的启动 停止 或重启
02) worker进程:处理用户请求信息,帮助用户向后端服务进行请求(php mysql)
添加worker进程方法
  1. vim nginx.conf
  2. worker_processes  1; #  修改nginx配置文件中worker_processes指令后面的数值

如何在一个系统中获悉CPU核心是多少?
①. 利用top命令--按数字1,获取到CPU核数信息
②. grep processor /proc/cpuinfo|wc -l
③. lscpu
查看cpu核心数命令示例
示例一
  1. [root@web01 ~]# top  # 按数字1
  2. top - 03:22:48 up 9 days, 26 min,  4 users,  load average: 1.06, 0.99, 0.92
  3. Tasks: 107 total,   1 running, 106 sleeping,   0 stopped,   0 zombie
  4. Cpu0  :  0.2%us,  0.6%sy,  0.0%ni, 99.0%id,  0.1%wa,  0.0%hi,  0.0%si,  0.0%st
  5. Cpu1  :  0.1%us,  0.1%sy,  0.0%ni, 99.1%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%st
  6. Mem:    485984k total,   452536k used,    33448k free,    24984k buffers
  7. Swap:   786428k total,     5912k used,   780516k free,   242048k cached
示例二
  1. [root@web01 ~]# lscpu |grep CPU
  2. CPU op-mode(s):        32-bit, 64-bit
  3. CPU(s):                2
示例三
  1. [root@web01 ~]# grep processor /proc/cpuinfo
  2. processor    : 0
  3. processor    : 1
2. 绑定不同的nginx进程到不同的CPU上

4个worker进程分配CPU资源方法:
  1. worker_processes    4;
  2. worker_cpu_affinity 0001 0010 0100 1000;
8个worker进程分配CPU资源方法:
  1. worker_processes    8;
  2. worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000; # 分配8进程方法
  3. worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
4个worker进程分配CPU资源方法:
  1. worker_processes    4;
  2. worker_cpu_affinity 0101 1010;  # 将进程分配到两颗CPU上
3)设置参数:client_body_timeout 55;
  1. syntax:client_body_timeout time;        #<==参数语法
  2. default:client_body_timeout 60s;        #<==默认值是60秒
  3. context:http,server,location            #<==可以放置的标签段
说明:表示定义服务端响应报文发送的间隔超时时间,客户端发送的请求报文中请求主体信息的间隔时间
4)设置参数:send_timeout 60s
  1. syntax:send_timeout time;            #<==参数语法
  2. default:send_timeout 60s;            #<==默认值是60秒
  3. context:http,server,location        #<==可以放置的标签段
说明:表示定义客户端读取服务端响应报文的间隔超时时间,服务端发送的响应报文间隔时间
8. 配置Nginx gzip压缩实现性能优化

1) Nginx gzip压缩功能介绍
Nginx gzip压缩模块提供了压缩文件内容的功能,用户请求的内容在发送到用户客户端之前, Nginx服务器会根据一些具体的策略实施压缩,以节约网站出口带宽,同时加快数据传输效率,来提升用户访问体验。
2) Nginx gzip压缩的优点
提升网站用户体验:
发送给用户的内容小了,用户访问单位大小的页面就加快了,用户体验提升了,网站口碑就好了。
节约网站带宽成本:
数据是压缩传输的,因此节省了网站的带宽流量成本,不过压缩时会稍 微消耗一些CPU资源,这个一般可以忽略。
此功能既能提升用户体验,又能使公司少花钱,一举多得。对于几乎所有的Web服务来说,这是一个非常重要的功能,Apache服务也有此功能。
  1. gzip on;
  2. gzip_min_length        1k;
  3. gzip_buffers        4 16k;
  4. gzip_http_version    1.1;
  5. gzip_comp_level     4;
  6. gzip_types             text/css text/xml application/javascript;
  7. gzip_vary             on;
说明:将服务端响应的数据信息进行压缩,可以有效节省带宽,提高用户访问效率

1) 纯文本内容压缩比很高,因此,纯文本的内容最好进行压缩,例如:html、js、css、xml、shtml等格式的文件。
2) 被压缩的纯文本文件必须要大于1KB,由于压缩算法的特殊原因,极小的文件压缩后可能反而变大。
3) 图片、视频(流媒体)等文件尽量不要压缩,因为这些文件大多都是经过压缩的。
4) 如果再压缩很可能不会减小或减小很少,或者有可能增大,同时压缩时还会消耗大量的CPU、内存资源。
压缩配置参数说明
  1. gzip on ;
  2. #<==开启gzip压缩功能。

  3. gzip_min_length lk;
  4. #<==设置允许压缩的页面最小宇节数,页面宇节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩。建议设置成大于1K,如果小于1K可能会越压越大。

  5. gzip_buffers    4 16k;
  6. #<==压缩缓冲区大小。表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据 大小相同的内存空间来存储gzip压缩结果。

  7. gzip_http_version 1.1 ;
  8. #<==压缩版本(默认1.1,前端为squid2.5时使用1.0),用于设置识别HTTP协议版本,默认是1.1, 目前大部分浏览器已经支持GZIP解压,使用默认即可。

  9. gzip_comp_level 2 ;
  10. #<==压缩比率。用来指定gzip压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源。

  11. gzip_types text/plain application/x-javascript text/css application/xml ;
  12. #<==用来指定压缩的类型,"text/html"类型总是会被压缩,这个就是HTTP原理部分讲的媒体类型。

  13. gzip_vary on ;
  14. #<==vary header支持。该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用Squid缓存 经过Nginx压缩的数据。
9. 配置Nginx expires缓存实现性能优化

简单地说,Nginx expires的功能就是为用户访问的网站内容设定一个过期时间,当用户第一次访问这些内容时,会把这些内容存储在用户浏览器本地,这样用户第二次及以后继续访问该网站时,浏览器会检查加载已经缓存在用户浏览器本地的内容,就不会去服务器下载了,直到缓存的内容过期或被清除为止。
Nginx expires功能优点:
1) expires可以降低网站的带宽,节约成本。
2) 加快用户访问网站的速度,提升用户访问体验。
3) 服务器访问量降低了,服务器压力就减轻了,服务器成本也会降低,甚至可以节约人力成本。
4) 对于几乎所有的Web服务来说,这是非常重要的功能之一,Apache服务也有此功能。
实践配置
  1. [root@web02 extra]# cat blog.conf
  2. server {
  3.         listen       80;
  4.         server_name  blog.etiantian.org;
  5.         server_tokens off;
  6.         # 静态请求处理的location
  7.         location / {
  8.             root   html/blog;
  9.             index  index.php index.html index.htm;
  10.         }
  11.         # 动态请求处理的location
  12.         location ~* .*.(php|php5)?$ {
  13.             root html/blog;
  14.             fastcgi_pass  127.0.0.1:9000;
  15.             fastcgi_index index.php;
  16.             include fastcgi.conf;
  17.         }
  18.        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
  19.        {
  20.           expires      10y;
  21.           root   html/blog;
  22.        }
  23.         location ~ .*.(js|css)$
  24.         {
  25.            expires      30d;
  26.            root    html/blog;
  27.         }
  28.     }

  29.    location / {
  30.         expires 3650d;
  31. }

1) 广告图片,用于广告服务,都缓存了就不好控制展示了。
2) 网站流量统计工具(JS代码),都缓存了流量统计就不准了。
3) 更新很频繁的文件(google的logo),这个如果按天,缓存效果还是显著的。
10. 配置FastCGI优化
FastCGI常见参数的Nginx配置示例如下:
  1. [root[url=home.php?mod=space&uid=2577300]@Nginx[/url] conf]# cat nginx.conf
  2. worker_processes  4;
  3. worker_cpu_affinity 0001 0010 0100 1000;
  4. worker_rlimit_nofile 65535;
  5. user nginx;
  6. events {
  7.     use epoll;
  8.     worker_connections  10240;
  9. }
  10. http {
  11.     include       mime.types;
  12.     default_type  application/octet-stream;
  13.     sendfile        on;
  14.     tcp_nopush on;
  15.     keepalive_timeout  65;
  16.     tcp_nodelay on;
  17.     client_header_timeout 15;
  18.     client_body_timeout 15;
  19.     send_timeout 15;
  20.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  21.                       '$status $body_bytes_sent "$http_referer" '
  22.                       '"$http_user_agent" "$http_x_forwarded_for"';
  23.     server_tokens off;
  24.     fastcgi_connect_timeout 240;
  25.     fastcgi_send_timeout 240;
  26.     fastcgi_read_timeout 240;
  27.     fastcgi_buffer_size 64k;
  28.     fastcgi_buffers 4 64k;
  29.     fastcgi_busy_buffers_size 128k;
  30.     fastcgi_temp_file_write_size 128k;
  31.     #fastcgi_temp_path /data/ngx_fcgi_tmp;
  32.     fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;
  33.     #web...............
  34.     server {
  35.         listen       80;
  36.         server_name  blog.oldboyedu.com;
  37.         root   html/blog;
  38.         location / {
  39.             root   html/blog;
  40.             index  index.php index.html index.htm;
  41.                 }
  42.         location ~ .*.(php|php5)${      
  43.             fastcgi_pass  127.0.0.1:9000;
  44.             fastcgi_index index.php;
  45.             include fastcgi.conf;
  46.             fastcgi_cache ngx_fcgi_cache;
  47.             fastcgi_cache_valid 200 302 1h;
  48.             fastcgi_cache_valid 301 1d;
  49.             fastcgi_cache_valid any 1m;
  50.             fastcgi_cache_min_uses 1;
  51.             fastcgi_cache_use_stale error timeout invalid_header http_500;
  52.             fastcgi_cache_key http://$host$request_uri;
  53.                 }
  54.         access_log  logs/web_blog_access.log  main;
  55.            }
  56.     upstream blog_etiantian{
  57.         server 10.0.0.8:8000 weight=1;
  58. }
  59.     server {
  60.         listen       8000;
  61.         server_name  blog.oldboyedu.com;
  62.         location / {
  63.             proxy_pass http://blog_etiantian;
  64.             proxy_set_header Host  $host;
  65.             proxy_set_header X-Forwarded-For  $remote_addr;
  66.               }
  67.         access_log  logs/proxy_blog_access.log  main;
  68.            }
  69. }


更多回帖

发帖
×
20
完善资料,
赚取积分