• 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压缩

  • 相关阅读:
    UPC 5130 Concerts
    poj 1079 Calendar Game
    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛
    CF932E
    浅谈Tarjan算法
    拉格朗日差值
    扩展欧几里得算法(exgcd)
    欧拉定理
    莫比乌斯反演
    除法分块
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/10545211.html
Copyright © 2020-2023  润新知