1、优化worker进程个数:

  在高并发、高访问量的WEB服务场景,需要事先启动更多的nginx进程,以保证快速响应并处理大量并发用户的请求,优化nginx进程个数的配置项就是,在nginx.conf主配置文件中的,如下:

worker_processes  1;        # 指定nginx默认开启的进程数,修改末尾数字

  那对于这个值要怎么设置,官方给的参考:

  一开始的时候我们可以先对CPU的核数进行查看,根据CPU的核数设置这个值,在一开始的时候设置的值可以等于CPU的核数也可大于CPU的核数,这样就会缩短服务的瞬时开销的时间提高访问速度,在高并发、高访问量的情况下也可以设置CPU核数*2,具体的实际情况根据需求来挑选,除了考虑CPU以外还要考虑硬盘和系统的负载

  这里提供一些关于统计CPU核心数和修改进程数的命令,如下:

[root@Nginx conf]# grep -c processor /proc/cpuinfo             # 查看CPU的核心数
2
[root@Nginx conf]# grep "physical id" /proc/cpuinfo|sort|uniq|wc -l # 查看CPU的总颗数
1
[root@Nginx conf]# grep worker_processes nginx.conf        # 查看NGINX的开启进程的值
worker_processes 1;
[root@Nginx conf]# sed -i "s#worker_processes 1#worker_processes 6#g" nginx.conf # 修改NGINX开启进程的值
[root@Nginx conf]#
[root@Nginx conf]# grep worker_processes nginx.conf        # 在次查看值是否成功修改
worker_processes 6;
[root@Nginx conf]# ../sbin/nginx -s reload              # 平滑重启NGINX服务
[root@Nginx conf]# ps aux | grep nginx | grep -v grep # 查看nginx开启进程
root 31719 0.0 0.1 46632 1968 ? Ss 04:08 0:00 nginx: master process sbin/nginx # 这是NGINX的管理进程,不包括在开启的worker进程中
nginx 86630 0.0 0.1 46632 1976 ? S 10:33 0:00 nginx: worker process
nginx 86631 0.0 0.1 46632 1976 ? S 10:33 0:00 nginx: worker process
nginx 86632 0.0 0.1 46632 1976 ? S 10:33 0:00 nginx: worker process
nginx 86633 0.0 0.1 46632 1976 ? S 10:33 0:00 nginx: worker process
nginx 86634 0.0 0.1 46632 1976 ? S 10:33 0:00 nginx: worker process
nginx 86635 0.0 0.1 46632 1976 ? S 10:33 0:00 nginx: worker process  

2、绑定不同nginx进程到不同cpu上:

  我们也知道,当所有的进程都在一个CPU上运行的时候,会导致NGINX进程的使用硬件的资源不均,那我们怎么解决这个事情呢,好办 哈哈 那就是把每个进程发送到不同的cpu上,这样就可以让CPU的资源得到充分利用

  需要在nginx.conf主配置文件中添加  如下:(红色标记位置添加)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_cpu_affinity 0001 0010 0100 100; # 添加此行内容(这个配置nginx进程与cpu核心数的亲和力参数,就是把不同的进程给到不同的CPU)
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
keepalive_timeout ;
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

  修改完成后,我们可以通过压力测试工具(webbench)来对压力测试:

[root@Nginx conf]# webbench -c 200 -t 180 http://127.0.0.1/    # 压力测试工具的使用
Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://127.0.0.1/
200 clients, running 180 sec. Speed=411369 pages/min, 2975571 bytes/sec.
Requests: 1234109 susceed, 0 failed.  

  PS:然后我们可以通过 top 查看CPU的使用率的平均值,其实变化并不大 原因是因为默认的nginx不需要添加这个优化参数已经默认做了绑定,所有也可以只做一下了解

3、调整单个进程运行的最大连接数:

  控制这个优化的参数的值是nginx.conf 主配置文件中的 worker_connections 参数:

  语法:

  参数语法:worker_connections number

  默认配置:worker_connections 1024

  添加位置:events区块

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ; # 这个就是来设置nginx的最大连接数,最大连接数由worker_processes和worker_connections决定,设置参考:client=worker_processes*worker_connections
}
http {
include mime.types;
server_tokens on;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

4、worker进程打开的最大文件数:

  控制这个优化的参数的值是nginx.conf 主配置文件中的 worker_rlimit_nofile 参数:

  语法:

  参数语法:worker_rlimit_nofile number

  默认配置:无

  添加位置:主标签段

  说明:此参数的作用是改变worker procrsses 能打开的最大文件数

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ; # 添加此参数项 最大打开文件数,可设置为系统优化后的ulimit -HSn的结果
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;

5、高效文件传输模式:

  这个优化是可由下面两个参数来设置完成:

  sendfile参数用于开启高效的文件传输,同时tcp_nopush和tcp_nodelay两个指令设置为no ,可防止网络及磁盘I/O阻塞,提升nginx的工作效率

  语法:

  参数语法:sendfile on | off;

  默认配置:sendfile off;

  添加位置:http、server、location、if in location 标签段

  参数作用:激活或者禁用sendfile()功能。sendfile()是作用于两个文件描述符之间的数据拷贝函数,这个拷贝操作是在内核之中完成的,被称为"零拷贝",sendfile比read和write函数要高效很多,因为read和write要把数据拷贝到应用层在进行操作

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on; # 添加此项
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

  tcp_nopush:参数作用:激活或者禁用Linux上的TCP_CORK socket选项,此选项仅仅当开启sendfile时才生效,激活这个.tcp_nopush参数可以吧允许把http response header和文件的开始部分放在一个文件里发布

  语法:

  参数语法:tcp_nopush on | off;

  默认配置:tcp_nopush off;

  添加位置:http、server、location 标签段

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on;
tcp_nopush on; # 添加此项
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

6、连接超时时间:

  这个优化是可由下面参数来设置完成:

  keepalive_timeout参数用于设置客户端连接保持会话的超时时间,超过这个时间,服务器会关闭该连接

  语法:

  参数语法:keepalive_timeout  timeout [header_timeout];

  默认配置:keepalive_timeout 75s;

  添加位置:http、server、location、标签段

  参数作用:keep-alive可以使客户端到服务器端已经建立的连接一直工作不退出,当服务器有持续请求时,keep-alive会使用已经建立的连接提供服务,从而避免了重新建立连接处理请求。

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on;
tcp_nopush on;
keepalive_timeout ; # 添加此项
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

  tcp_nodelay参数用于激活tcp_nodelay功能,提高I/O性能

  语法:

  参数语法:tcp_nodelay on | off;

  默认配置:tcp_nodelay on;

  添加位置:http、server、location 标签段

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on;
tcp_nopush on;
tcp_nodelay on; # 添加此项
keepalive_timeout ;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

  client_header_timeout参数用于设置读取客户端请求头数据的超时时间

  语法:

  参数语法:client_header_timeout time;

  默认配置:client_header_timeout  60s;

  添加位置:http、server 标签段

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout ;
client_header_timeout ; # 添加此项
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

  client_boby_timeout参数用于设置度读取客户端请求主体的超时时间

  语法:

  参数语法:client_boby_timeout  time;

  默认配置:client_boby_timeout  60s;

  添加位置:http、server、location 标签段

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout ;
client_header_timeout ;
client_boby_timeout ; # 添加此项
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

  send_timeout参数用于指定响应客户端的超时时间

  语法:

  参数语法:send_timeout  time;

  默认配置:send_timeout  60s;

  添加位置:http、server、location 标签段

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout ;
client_header_timeout ;
client_boby_timeout ;
send_timeout ; # 添加此项
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

7、优化文件上传大小的限制:

  client_max_boby_size参数用于设置上传文件的大小

  语法:

  参数语法:client_max_boby_size  size;

  默认配置:client_max_boby_size   1m;

  添加位置:http、server、location 标签段

  参数作用:设置最大的允许的客户端请求主体的=大小,在请求头域有"Content-Length",如果超过了此项设置的值,客户端会收到413错误,意思是在请求的条目过大,有可能浏览器不能正常显示,设置为0表示禁止检查客户端请求主体大小,此参数对提高服务器的安全起到一定的作用

  具体修改参数,如下:(红色标记为修改或者添加项)

[root@Nginx conf]# cat nginx.conf
worker_processes ;
worker_rlimit_nofile ;
worker_cpu_affinity ;
error_log logs/error.log;
events {
worker_connections ;
}
http {
include mime.types;
server_tokens on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout ;
client_header_timeout ;
client_boby_timeout ;
send_timeout ;
client_max_boby_size 8m; # 添加此项
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
include www_date/brian.conf;
include www_date/brianzjz.conf;
include www_date/status.conf;
}

8、FastCGI参数优化(配合PHP动态服务):

  FastCGI参数是配合nginx向后端请求PHP动态引擎服务的相关参数,下面的相关参数都属于nginx的配置参数:

Nginx FastCGI 相关参数 说明
fastcgi_connect_timeout 表示Nginx服务器和后端FastCGI服务器连接的超时时间,默认值是60s,这个参数不要超过75s,因为建立的连接越多,消耗的资源就越多
fastcgi_send_timeout 设置nginx允许FastCGI服务器端返回数据的超时时间,默认60s
fastcgi_read_timeout 设置nginx从FastCGI服务器端读取响应信息的超时时间,表示连接建立成功后,nginx等待后端服务器的响应时间,是nginx已经进入后端的排队之中等候处理的时间
fastcgi_buffer_size 这是nginx FastCGI的缓冲区大小参数,用来读取从fastCGI服务器端收到的第一部分响应信息的缓冲区大小,这里的第一部分通常会包含一个小的响应头部
fastcgi_buffers 设定用来读取从FastCGI服务器端收到的响应信息的缓冲区大小和缓冲区数量,默认值为fastcgi_buffer 8 4k|8k;
proxy_busy_buffer_size 用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐的大小是proxy_buffers*2
fastcgi_busy_buffer_size 用于设置系统很忙时可以使用的fastcgi_buffer大小,官方推荐大小为fastcgi_buffer*2
fastcgi_temp_file_write_size FastCGI临时文件的大小,可设置为128~256KB
fastcgi_cache brian_nginx 表示开启FastCGI缓存并为其指定一个名字
fastcgi_cache_path fastcgi_cache缓存目录设置
fastcgi_cache_valid 用来指定应答代码的缓存时间,示例:fastcgi_cache_valid 200 302 1h; 表示将200和302的应答缓存1小时
fastcgi_cache_min_uses 设置请求几次之后响应被缓存,1表示一次就被缓存
fastcgi_cache_use_stale 定义在什么情况下使用过期缓存,示例fastcgi_cache_use_stale error timeout invalid_header http_500 ;
fastcgi_cache_key

示例:fastcgi_cache_key $request_method://$host$request_uri;

示例:fastcgi_cache_key http://$host$request_uri;

定义fastcgi_cache的key,示例中以请求的uri作为缓存的key,nginx会取这个key的md5作为缓存文件,如果设置了缓存散列目录,nginx会从后往前取相应的位数作为目录

Nginx的性能优化的更多相关文章

  1. Nginx配置性能优化与压力测试webbench【转】

    这一篇我们来说Nginx配置性能优化与压力测试webbench. 基本的 (优化过的)配置 我们将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.你应该能够在服务器的/et ...

  2. Nginx配置性能优化

    大多数的Nginx安装指南告诉你如下基础知识--通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了.而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...

  3. Nginx配置性能优化(转)

    大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了.而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...

  4. Nginx的性能优化方案

    nginx的优化 . gzip压缩优化 . expires缓存有还 . 网络IO事件模型优化 . 隐藏软件名称和版本号 . 防盗链优化 . 禁止恶意域名解析 . 禁止通过IP地址访问网站 . HTTP ...

  5. [转] Nginx配置性能优化

    大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了.而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...

  6. 22、编译安装nginx及性能优化

    22.1.编译安装nginx: 1.下载nginx: [root@slave-node1 ~]# mkdir -p /tools/ [root@slave-node1 ~]# cd /tools/ [ ...

  7. Nginx服务器性能优化与安全配置实践指南

    转载自:https://www.bilibili.com/read/cv16151784?spm_id_from=333.999.0.0 1.引言 1.1 目的 为了更好的指导部署与测试艺术升系统ng ...

  8. 关于Nginx配置性能优化

    基本的 (优化过的)配置 将修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.在服务器的/etc/nginx目录中找到nginx.conf. 首先,我们将谈论一些全局设置,然 ...

  9. nginx https性能优化

    影响HTTPS速度的主要原因:秘钥交换算法 常见的密钥交换算法有 RSA,ECDHE,DH,DHE 等算法.它们的特性如下: RSA:算法实现简单,诞生于 1977 年,历史悠久,经过了长时间的破解测 ...

随机推荐

  1. django-suit报错解决-----from suit.apps import DjangoSuitConfig

    (py27) [root@test SimpletourDevops]# python manage.py makemigrationsTraceback (most recent call last ...

  2. Tornado初探

    Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效 ...

  3. 课程一(Neural Networks and Deep Learning),第四周(Deep Neural Networks)—— 0.学习目标

    Understand the key computations underlying deep learning, use them to build and train deep neural ne ...

  4. salesforce 零基础学习(七十)使用jquery tree实现树形结构模式

    项目中UI需要用到树形结构显示内容,后来尽管不需要做了,不过还是自己做着玩玩,mark一下,免得以后项目中用到. 实现树形结构在此使用的是jquery的dynatree.js.关于dynatree的使 ...

  5. spring boot实现ssm(2)功能

    spring 和 mybatis 整合的那篇: ssm(2) . 配置文件比ssm(1) 更多, 在做项目的时候, 配置文件是一个让人头大的事情. 那么在spring boot中, 实现相同功能, 需 ...

  6. 开启linux远程访问权限

    摘要:今天在Linux服务器上安装了msyql数据库,在本地访问的时候可以访问,但是我想通过远程的方式访问的时候就不能访问了,查询资料后发现,Linux下MySQL默认安装完成后只有本地访问的权限,没 ...

  7. SpringCloud入门之Maven系统安装及配置

    一.Maven 介绍 这个单词中文翻译为“专家”或“内行”.下面将向你介绍 Maven这一跨平台的项目管理工具.作为 Apache 组织中的一个成功的开源项目,Maven 主要服务于基 Java 平台 ...

  8. Spring @ModelAttribute

    正文开始之前,先介绍个东西,Spring能够自动将请求参数封装到对应JavaBean上! 代码比较简单,也没有什么配置要记录,只是开启了<mvc:annotation-driven/>,可 ...

  9. ElasticSearch 学习记录之Text keyword 两种基本类型区别

    ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...

  10. 进程监控工具supervisor

    supervisor是一个python编写的进程管理工具, 可以方便的管理和监控进程. supervisor分为服务端supervisord和客户端supervisorctl. supervisor由 ...