一、性能优化考虑点

  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架构篇之性能优化的更多相关文章

  1. Nginx详解二十:Nginx深度学习篇之HTTPS的原理和作用、配置及优化

    一.HTTPS原理和作用: 1.为什么需要HTTPS?原因:HTTP不安全1.传输数据被中间人盗用.信息泄露2.数据内容劫持.篡改 2.HTTPS协议的实现对传输内容进行加密以及身份验证 对称加密:加 ...

  2. Nginx详解二十八:Nginx架构篇Nginx+Lua的安全waf防火墙

    Nginx+Lua的安全waf防火墙 看一下别人写好的:https://github.com/loveshell/ngx_lua_waf 先安装git:yum -y install git 在/opt ...

  3. Nginx详解二十二:Nginx深度学习篇之Lua解释器安装及基础语法

    解释器 Lua:Lua是一个简洁.轻量.可扩展的脚本语言 Nginx+Lua优势充分的结合Nginx的并发处理epoll优势的Lua的轻量实现简单的功能切高并发的场景 安装Lua 1.安装解释器:yu ...

  4. Nginx详解二十三:Nginx深度学习篇之Nginx+Lua开发环境搭建

    Nginx+Lua开发环境 1.下载LuaJIT解释器wget http://luajit.org/download/LuaJIT-2.0.2.tar.gztar -zxvf LuaJIT-2.0.2 ...

  5. Nginx详解二十一:Nginx深度学习篇之配置苹果要求的openssl后台HTTPS服务

    配置苹果要求的证书: 1.服务器所有的连接使用TLS1.2以上的版本(openssl 1.0.2) 2.HTTPS证书必须使用SHA256以上哈希算法签名 3.HTTPS证书必须使用RSA2048位或 ...

  6. Nginx详解二十九:基于Nginx的中间件架构设计

    基于Nginx的中间件架构 一:了解需求 1.定义Nginx在服务体系中的角色 1.静态资源服务 2.代理服务 3.动静分离 2.静态资源服务的功能设计 3.代理服务 二:设计评估 三:配置注意事项

  7. Nginx详解二十五:Nginx架构篇之Nginx常见的问题

    Nginx常见的问题 1.相同server_name多个虚拟主机优先级访问,是按读取文件的优先级来排序 在/opt/app/下准备3个code文件夹,下面放入3个html文件,里面的内容分别是code ...

  8. Nginx详解二十七:Nginx架构篇之安全篇

    1.常见的恶意行为:爬虫行为和恶意抓取.资源盗用 解决方案: 基础防盗链功能:不让恶意用户能轻易爬去网站对外数据 secure_link_module模块:对数据安全性提高,加密验证和失效性,适合核心 ...

  9. Nginx详解二十四:Nginx深度学习篇之灰度发布

    实战场景 - 灰度发布 灰度发布的作用:按照一定的关系区别,分部分的代码进行上线,使代码的发布能平滑过渡上线实现方式: 1.用户的信息cookie等信息区别 2.根据用户的IP地址 安装memcach ...

随机推荐

  1. mongodb 系列 ~ mongo的副本集(3)

    一 简介:今天咱们来聊聊mongodb复制的具体一些案例 二 副本集 1 当mongodb采用全量复制时,如何观察全量复制的进度 对比文件本身和primary大小 2 mongodb全量复制的过程 旧 ...

  2. Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客

    ==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...

  3. 《jQuery精品教程视频》-每天的复习笔记

    第一天 //jquery:简单.粗暴 //jq和js的关系 //js是什么? js是一门编程语言 //jq仅仅是基于js的一个库,jq可理解为就是开发js的一个工具. //概念 //1. 为什么要学j ...

  4. renren-security旧版本 分模块 的模块之间关系浅析

    Maven结构,一个父模块 六个子模块 七个pom.xml: \git\renren-security\pom.xml <modules> <module>renren-com ...

  5. 关于vue2.0 cnpm 镜像安装

    前言:这几天安装vue环境一直报错,愁死我了,踩了好多坑,以前学的时候也安装成功了,后来很忙然后一直没顾上学vue,这么最近要学这个 在安装环境中平凡报错特此记笔记如下: 1.首先去下载node.js ...

  6. ARM核心板_迅为imx6工控核心板_核心板中的小新潮

    ARM核心板_迅为imx6工控核心板_核心板中的小新潮核心板参数 尺寸 51mm*61mm CPU Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz 内存 2GB DD ...

  7. Css - 浮动布局

    Css - 浮动布局 浮动布局 float 取值:left | right | none 利用float属性可设置元素的浮动,虽然浮动主要是应用于块元素,但行内元素其实也可以浮动,但行内元素本来就是一 ...

  8. 使用@Valid和BindingResult验证请求参数的合法性并处理校验结果

    /** * 添加用户,使用@RequestBody将请求体映射到Action方法参数中 * 使用@Valid注解验证请求参数的合法性 * 使用BindingResult处理校验结果 * @param ...

  9. CMOS Sensor的调试经验分享【转】

    转自:https://blog.csdn.net/yapingmcu/article/details/37817727 转自:http://bbs.52rd.com/forum.php?mod=vie ...

  10. 看完此文还不懂NB-IoT,你就过来掐死我吧...

    看完此文还不懂NB-IoT,你就过来掐死我吧....... 1 1G-2G-3G-4G-5G 不解释,看图,看看NB-IoT在哪里? 2 NB-IoT标准化历程 3GPP NB-IoT的标准化始于20 ...