nginx高并发优化

来源:互联网 发布:阿里云域名解析时间 编辑:程序博客网 时间:2024/05/23 19:51

1.安装nginx

1.1解压nginx,进入到目录
1.2配置安装选项

#./configure --prefix=/usr/local/nginx --add-module=/app/ngx_http_consistent_hash-master --with-http_stub_status_module
配置选项是一致性哈希,以及nginx监控模块stub_status
1.3安装
#make && make install
1.4监控模块stub_status的使用方法 [来源]
浏览器中输入ip/status,如:192.168.136.128/status,不断点击【刷新】浏览器,得到运行中的nginx的信息。
例如:
- - - - - - - - - - - - - - - - - - 
Active connections: 145 
server accepts handled requests
 1749 1749 3198 
Reading: 0 Writing: 3 Waiting: 142
- - - - - - - - - - - - - - - - - -  
参数详解:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Active connections:145            

--nginx 正处理的活动连接数145个。

server accepts handled requests
 1749   1749     3198                    
--nginx启动到现在共处理了 1749个连接 ,nginx启动到现在共成功创建1749次握手 请求丢失数=(握手-连接),可以看出,我们没丢请求;总共处理了3198 次请求。
Reading: 0 Writing: 3 Waiting: 142 
--Reading :nginx读取到客户端的Header信息数。
--Writing :nginx返回给客户端的Header信息数。
--Waiting :Nginx已经处理完正在等候下一次请求指令的驻留连接.开启keep-alive的情况下,这个值等于active–(reading+writing)。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

2.高并发解决思路--socket层面

2.1修改nginx.conf
   events段
   worker_connections 10240;
   全局区
   keepalive_timeout  0;  //对于高并发服务器,应关闭keep_alive,以便加快tcp的回收
2.2修改每一个端口最大的监听队列的长度
   # more /proc/sys/net/core/somaxconn
   默认为128,改为50000:
   # echo 50000 > /proc/sys/net/core/somaxconn
2.3加快TIME-WAIT套接字的回收
   # more /proc/sys/net/ipv4/tcp_tw_recycle
   默认为0;改为1:
   # ech0 1 > /proc/sys/net/ipv4/tcp_tw_recycle
2.4设置处于TIME_WAIT的连接用于新的tcp连接
   # ech0 1 > /proc/sys/net/ipv4/tcp_tw_reuse
2.5linux系统默认打开TCP同步标签syncookie,防止一个套接字在有过多试图连接到达时引起的过载,在这里要将其关闭
   改为0:
   # ech0 1 > /proc/sys/net/ipv4/tcp_tw_recycle

3.高并发解决思路--文件层面

3.1修改nginx.conf,在全局区添加下面代码
   worker_rlimit_nofile 50000;  //更改worker进程的最大打开文件数限制
3.2修改linux系统可以打开文件的最大数

   # ulimit -n 50000


4.使用apache的ApacheBench(简称ab)工具对nginx服务器进行高并发的压力测试 [参考]

4.1ab压力测试的原理
  ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。
  此外,ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。
4.2ab参数说明
格式:ab [options] [http://]hostname[:port]/path
常用参数说明:
-n 在测试会话中所执行的请求个数(本次测试总共要访问页面的次数),默认为1。
-c 并发数(即一次产生的请求个数),默认是为1。
4.3ab使用举例
  # ab -c 5000 -n 30000 http://127.0.0.1/index.php
  意思是:5000个并发(模拟5000人同时访问),总计发出30000个请求,测试的目标是http://127.0.0.1/index.php。


0 0