Nginx详解二十六:Nginx架构篇之性能优化
Posted zhongyehai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx详解二十六:Nginx架构篇之性能优化相关的知识,希望对你有一定的参考价值。
一、性能优化考虑点
1、当前系统结构瓶颈
通过压力测试观察指标、日志检测、性能分析
2、了解业务模式
接口业务类型、系统层次化结构
3、性能与安全
二、ab接口压力测试工具
1、安装:yum -y install httpd-tools
2、使用:
ad -n 2000 -c 2 http://127.0.0.1
-n:总的请求数
-c:并发数
-k:是否开始长连接
准备环境
检查语法,并重载
nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf
执行压测:ab -n 2000 -c 2 http://127.0.0.1/jesonc.html
CompletedCompleted表示进度,即当前完成多少个请求:
ab工具探测到的服务软件:
文件路径和body里面返回的文件大小:
性能指标:
Concurrency Level: 设定的并发数
Time taken for tests: 压测总共花费的时间
Complete requests: 总请求数
Failed requests: 失败的个数
Requests per second:每秒请求数(TPS)
Time per request: 从客户端来看,一个请求需要用到的时间
Time per request: 从服务端来看,处理一个请求要花费的时间
Transfer rate: 传输的速率
看一下动态接口,在tomcat9090下准备一个接口,实现访问时等待5秒
启动tomcat
确认接口可以访问:curl -I 127.0.0.1/sleepjava.jsp
两个并发跑20次看一下:ab -n 20 -c 2 http://127.0.0.1/sleepjava.jsp
以下演示可以证明Nginx做动静分离的好处:
再压一下jesonc.html这个静态资源,10个并发跑2000次:ab -n 2000 -c 2 http://127.0.0.1/jesonc.html
TPS:8899.45
把/opt/app/code/cache/下的jesonc.html移走,触发try_files访问tomcat下的jesonc.html
还是10个并发跑2000次:ab -n 2000 -c 10 http://127.0.0.1/jesonc.html
TPS:128.72
可见,当把静态资源放在Nginx上,性能比把静态资源放tomcat上好得多
三、系统与Nginx性能优化
文件句柄:
linux/Unix上,一切皆文件,每一次用户发起请求就会生成一个文件句柄,文件句柄可以理解为就是一个索引,所以文件句柄就会随着请求量的增多,而进程调用的频率增加,文件句柄的产生就越多,系统对文件句柄默认的限制是1024个,对Nginx来说非常小了,需要改大一点
设置方式:
系统全局性修改、用户局部性修改、进程局部性修改
vim /etc/security/limits.conf
在End of file前面添加4个参数
root soft nofile 65535
root hard nofile 65535
* soft nofile 25535
* hard nofile 25535
soft:软控制,到达设定值后,操作系统不会采取措施,只是发提醒
hard:硬控制,到达设定值后,操作系统会采取机制对当前进程进行限制,这个时候请求就会受到影响
root:这里代表root用户(系统全局性修改)
*:代表全局,即所有用户都受此限制(用户局部性修改)
nofile:指限制的是文件数的配置项
后面的数字即设定的值,一般设置10000左右
尤其在企业新装的系统,这个地方应该根据实际情况进行设置,可以设置全局的,也可以设置用户级别的
修改进程级别的限制
vim /etc/nginx/nginx.conf
在配置文件中添加一行:worker_rlimit_nofile 35535;
CPU的亲和
把Nginx不同work工作的进程绑定到不同的CPU上,就能减少在work间不断的切换CPU,减少性能损耗
第一种配置:指定worker绑定指定CPU
由于我的虚拟机是单核,所以就这样配就行了
检查语法,并重载
nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf
查看nginxworker占用cpu核数的情况:ps -eo pid,args,psr | grep [n]ginx
由于我这里是单核,所以只会有cpu0
也可以指定worker绑定到指定cpu上面
如以下配置,这样会造成worker1和worker2都绑定到CPU1即第二个CPU上
第二种配置:指定worker能使用指定范围的cpu
worker1可以使用cpu1、3、5、7、9、11、13、15
worker2可以使用cpu0、2、4、6、8、10、12、14
第三种配置:nginx自动绑定(Nginx1.9以后支持)
只要配置好worker数,并且配置为auto,Nginx就会自动进行配置1的方式的配置
Nginx通用配置优化
events:
worker_connections:Nginx限制每一个worker进程能处理多少个连接,默认1024个,可以适当调高
http:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
#Charset
charset utf-8;
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for" "$request_uri"‘;
access_log /var/log/nginx/access.log main;
#Core modlue
sendfile on;
#tcp_nopush on;
#tcp_nodeny on;
keepalive_timeout 65;
#Gzip module
gzip on;
gzip_disable "MSIE [1-6].";
gzip_http_version 1.1;
#Virtal Server
include /etc/nginx/conf.d/*.conf;
}
charset utf-8:服务端返回给客户端报文的时候,Nginx强行将报文转码为utf-8
gzip_disable "MSIE [1-6].":由于IE6对gzip压缩支持的不是很好,所以这里配置agent是IE6以下的版本,则不进行gzip压缩
以上是关于Nginx详解二十六:Nginx架构篇之性能优化的主要内容,如果未能解决你的问题,请参考以下文章
Nginx详解二十一:Nginx深度学习篇之配置苹果要求的openssl后台HTTPS服务