• 提升nginx性能


    一、系统层面
    1、调整同时打开文件数量
    ulimit -n 20480
    2、TCP最大连接数(somaxconn)
    echo 10000 > /proc/sys/net/core/somaxconn
    3、TCP连接立即回收、回用(recycle、reuse)
    echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
    echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
    4、不做TCP洪水抵御
    echo 0 > /proc/sys/net/ipv4/tcp_syncookies
    也可以直接使用优化后的配置,在/etc/sysctl.conf中加入:
    net.core.somaxconn = 20480
    net.core.rmem_default = 262144
    net.core.wmem_default = 262144
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_rmem = 4096 4096 16777216
    net.ipv4.tcp_wmem = 4096 4096 16777216
    net.ipv4.tcp_mem = 786432 2097152 3145728
    net.ipv4.tcp_max_syn_backlog = 16384
    net.core.netdev_max_backlog = 20000
    net.ipv4.tcp_fin_timeout = 15
    net.ipv4.tcp_max_syn_backlog = 16384
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_max_orphans = 131072
    net.ipv4.tcp_syncookies = 0
    使用:sysctl -p 生效
    sysctl -p


    二、nginx层面
    修改nginx配置文件,nginx.conf
    增加work_rlimit_nofile和worker_connections数量,并禁用keepalive_timeout。
    worker_processes  1; #nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数
    worker_rlimit_nofile 20000; #一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致
    events {
    use epoll;#使用epoll的I/O模型
    worker_connections 20000;#每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections
    multi_accept on;
    }
    http {
    keepalive_timeout 0;
    }


    三、测试
    重启nginx
    service nginx restart


    使用ab压力测试
    D:phpStudyApachein>ab -r -n 150000 -c 10000 http://192.168.1.198/msg.php
    This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/

    Benchmarking 192.168.1.198 (be patient)
    Completed 15000 requests
    Completed 30000 requests
    Completed 45000 requests
    Completed 60000 requests
    Completed 75000 requests
    Completed 90000 requests
    Completed 105000 requests
    Completed 120000 requests
    Completed 135000 requests
    Completed 150000 requests
    Finished 150000 requests


    Server Software: nginx/1.10.1
    Server Hostname: 192.168.1.198
    Server Port: 80

    Document Path: /msg.php
    Document Length: 955 bytes

    Concurrency Level: 10000
    Time taken for tests: 553.886 seconds
    Complete requests: 150000
    Failed requests: 74065
    (Connect: 0, Receive: 0, Length: 74065, Exceptions: 0)
    Non-2xx responses: 74065
    Total transferred: 108769526 bytes
    HTML transferred: 85048014 bytes
    Requests per second: 270.81 [#/sec] (mean)
    Time per request: 36925.756 [ms] (mean)
    Time per request: 3.693 [ms] (mean, across all concurrent requests)
    Transfer rate: 191.77 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 0 1 19.0 1 3004
    Processing: 332 33370 25597.6 31689 92093
    Waiting: 163 32879 25640.0 31420 91598
    Total: 332 33370 25597.5 31689 92093

    Percentage of the requests served within a certain time (ms)
    50% 31689
    66% 60464
    75% 60730
    80% 60928
    90% 61319
    95% 61790
    98% 62191
    99% 62640
    100% 92093 (longest request)

    D:phpStudyApachein>

    如果不优化,运行时间超过半个小时!!!
    ab -r -n 150000 -c 10000 http://192.168.1.198/msg.php
    This is ApacheBench, Version 2.3 <$Revision: 1706008 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/

    Benchmarking 192.168.1.198 (be patient)
    Completed 15000 requests
    Completed 30000 requests
    Completed 45000 requests
    Completed 60000 requests
    Completed 75000 requests
    Completed 90000 requests
    Completed 105000 requests
    Completed 120000 requests
    Completed 135000 requests
    Completed 150000 requests
    Finished 150000 requests


    Server Software: nginx/1.10.1
    Server Hostname: 192.168.1.198
    Server Port: 80

    Document Path: /msg.php
    Document Length: 955 bytes

    Concurrency Level: 10000
    Time taken for tests: 3136.477 seconds
    Complete requests: 150000
    Failed requests: 0
    Total transferred: 168150000 bytes
    HTML transferred: 143250000 bytes
    Requests per second: 47.82 [#/sec] (mean)
    Time per request: 209098.485 [ms] (mean)
    Time per request: 20.910 [ms] (mean, across all concurrent requests)
    Transfer rate: 52.35 [Kbytes/sec] received

    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 0 20 236.9 1 3045
    Processing: 4178 202109 29524.0 208780 220830
    Waiting: 1246 105285 59956.2 104752 216204
    Total: 4179 202129 29523.9 208806 220831

    Percentage of the requests served within a certain time (ms)
    50% 208806
    66% 210991
    75% 211892
    80% 212733
    90% 213611
    95% 214917
    98% 217376
    99% 217451
    100% 220831 (longest request)

  • 相关阅读:
    异常处理
    反射4中内置函数
    property装饰器与继承
    封装
    面向对象编程
    面向对象编程
    项目开发规范
    logging模块
    22. 一个题来探查对 字符串,指针,数组三方面的关联使用方面的概念是否清晰,分析下面三个printf打印什么?
    21. 让指针数组结尾带NULL,使遍历时不依靠计算整个数组大小就可以在结尾遍历结束
  • 原文地址:https://www.cnblogs.com/slqt/p/11231666.html
Copyright © 2020-2023  润新知