• uwsgi性能调忧


    摘要:调大uwsgi配置中 listen=1024的数目是提高并发能力最有效的办法。第二种方法是调大processes数目


    发现总是超时报警

    1  使用ab确定网络具体征况

    [bre@dmp-1 ~]$ ab -n 1000 -c 100 http://.com/Mapping.do?


    Concurrency Level:      100
    Time taken for tests:   1.040 seconds
    Complete requests:      1000
    Failed requests:        0
    Write errors:           0
    Non-2xx responses:      1000
    Total transferred:      486000 bytes
    HTML transferred:       0 bytes
    Requests per second:    961.42 [#/sec] (mean)
    Time per request:       104.013 [ms] (mean)
    Time per request:       1.040 [ms] (mean, across all concurrent requests)
    Transfer rate:          456.30 [Kbytes/sec] received


    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    0   0.4      0       2
    Processing:     3   28  61.9     25    1005
    Waiting:        3   28  61.9     25    1005
    Total:          5   28  61.9     25    1006


    Percentage of the requests served within a certain time (ms)
      50%     25
      66%     26
      75%     26
      80%     26
      90%     27
      95%     27
      98%     29
      99%     31

     100%   1006 (longest request)


    [bre@dmp-1 ~]$ ab -n 1000 -c 200 http://.com/Mapping.do?

    Concurrency Level:      200
    Time taken for tests:   3.022 seconds
    Complete requests:      1000
    Failed requests:        0
    Write errors:           0
    Non-2xx responses:      909
    Total transferred:      463432 bytes
    HTML transferred:       0 bytes
    Requests per second:    330.91 [#/sec] (mean)
    Time per request:       604.403 [ms] (mean)
    Time per request:       3.022 [ms] (mean, across all concurrent requests)
    Transfer rate:          149.76 [Kbytes/sec] received


    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    1   1.2      0       4
    Processing:     6  274 791.9     28    3015
    Waiting:        6  274 791.9     28    3015
    Total:         10  275 792.5     29    3018


    Percentage of the requests served within a certain time (ms)
      50%     29
      66%     29
      75%     30
      80%     30
      90%     43
      95%   3015
      98%   3015
      99%   3016
     100%   3018 (longest request)
    [bre@dmp-1 ~]$ ab -n 1000 -c 300 http://.com/Mapping.do?


    Concurrency Level:      300
    Time taken for tests:   3.036 seconds
    Complete requests:      1000
    Failed requests:        0
    Write errors:           0
    Non-2xx responses:      811
    Total transferred:      439128 bytes
    HTML transferred:       0 bytes
    Requests per second:    329.35 [#/sec] (mean)
    Time per request:       910.892 [ms] (mean)
    Time per request:       3.036 [ms] (mean, across all concurrent requests)
    Transfer rate:          141.24 [Kbytes/sec] received


    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    2   2.4      0       6
    Processing:     5  521 1043.3     29    3027
    Waiting:        5  521 1043.3     29    3027
    Total:         10  523 1044.8     29    3032


    Percentage of the requests served within a certain time (ms)
      50%     29
      66%     31
      75%     35
      80%     53
      90%   3021
      95%   3027
      98%   3029
      99%   3030
     100%   3032 (longest request)
    [bre@dmp-1 ~]$ 
    [bre@dmp-1 ~]$ ab -n 1000 -c 400 http://.com/Mapping.do?
    Concurrency Level:      400
    Time taken for tests:   3.025 seconds
    Complete requests:      1000
    Failed requests:        0
    Write errors:           0
    Non-2xx responses:      711
    Total transferred:      414328 bytes
    HTML transferred:       0 bytes
    Requests per second:    330.58 [#/sec] (mean)
    Time per request:       1209.982 [ms] (mean)
    Time per request:       3.025 [ms] (mean, across all concurrent requests)
    Transfer rate:          133.76 [Kbytes/sec] received


    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    3   3.7      0       9
    Processing:     6  738 1148.8     28    3013
    Waiting:        6  738 1148.8     28    3013
    Total:         13  741 1151.3     28    3022


    Percentage of the requests served within a certain time (ms)
      50%     28
      66%     38
      75%   2011
      80%   2016
      90%   3013
      95%   3016
      98%   3019
      99%   3019
     100%   3022 (longest request)
    [bre@dmp-1 ~]$ ab -n 1000 -c 500 http://cm.api.baifendian.com/Mapping.do?bfd_nid=behe
    This is ApacheBench, Version 2.3 <$Revision: 655654 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/


    Benchmarking cm.api.baifendian.com (be patient)
    Completed 100 requests
    Completed 200 requests
    Completed 300 requests
    Completed 400 requests
    Completed 500 requests
    Completed 600 requests
    Completed 700 requests
    Completed 800 requests
    Completed 900 requests
    Completed 1000 requests
    Finished 1000 requests




    Server Software:        nginx/1.2.9
    Server Hostname:        cm.api.baifendian.com
    Server Port:            80


    Document Path:          /Mapping.do?bfd_nid=behe
    Document Length:        0 bytes


    Concurrency Level:      500
    Time taken for tests:   3.100 seconds
    Complete requests:      1000
    Failed requests:        0
    Write errors:           0
    Non-2xx responses:      610
    Total transferred:      389280 bytes
    HTML transferred:       0 bytes
    Requests per second:    322.63 [#/sec] (mean)
    Time per request:       1549.754 [ms] (mean)
    Time per request:       3.100 [ms] (mean, across all concurrent requests)
    Transfer rate:          122.65 [Kbytes/sec] received


    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    5   4.7      9      10
    Processing:     9  930 1168.2     31    3014
    Waiting:        9  930 1168.2     31    3014
    Total:         18  935 1171.1     33    3023


    Percentage of the requests served within a certain time (ms)
      50%     33
      66%   2012
      75%   2016
      80%   2018
      90%   3018
      95%   3020
      98%   3021
      99%   3021
     100%   3023 (longest request)
    [bre@dmp-1 ~]$ ab -n 1000 -c 600 http://cm.api.baifendian.com/Mapping.do?bfd_nid=behe
    This is ApacheBench, Version 2.3 <$Revision: 655654 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/


    Benchmarking cm.api.baifendian.com (be patient)
    Completed 100 requests
    Completed 200 requests
    Completed 300 requests
    Completed 400 requests
    Completed 500 requests
    Completed 600 requests
    Completed 700 requests
    Completed 800 requests
    Completed 900 requests
    Completed 1000 requests
    Finished 1000 requests




    Server Software:        nginx/1.2.9
    Server Hostname:        cm.api.baifendian.com
    Server Port:            80


    Document Path:          /Mapping.do?bfd_nid=behe
    Document Length:        0 bytes


    Concurrency Level:      600
    Time taken for tests:   3.039 seconds
    Complete requests:      1000
    Failed requests:        0
    Write errors:           0
    Non-2xx responses:      511
    Total transferred:      364728 bytes
    HTML transferred:       0 bytes
    Requests per second:    329.08 [#/sec] (mean)
    Time per request:       1823.243 [ms] (mean)
    Time per request:       3.039 [ms] (mean, across all concurrent requests)
    Transfer rate:          117.21 [Kbytes/sec] received


    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    7   5.2     10      12
    Processing:     9 1126 1170.6     45    3022
    Waiting:        9 1126 1170.6     45    3022
    Total:         21 1133 1173.4     55    3033


    Percentage of the requests served within a certain time (ms)
      50%     55
      66%   2014
      75%   2017
      80%   2019
      90%   3019
      95%   3025
      98%   3028
      99%   3031
     100%   3033 (longest request)


    可以看到,每秒处理请求数目极限大约是300,随着并发数目的增大,性能开始下降。


    现在的请求每天1000000条,那么高峰时段的请求次数为:1000000/(8*60*60)*10 =  347 (次每秒)

    每天正常请求时段是8小时,高峰时段请求频次是平均的8~10倍。

    所以只是勉强够用而已,还需要提高速度(优化整个程序流程或者增大并发进程)。


    2   使用 uwsgitop 查看是前端(nginx)还是后端(uwsgi和后续处理流程)


    观察结果

    uwsgi-1.9.14 - Mon Feb 10 16:17:16 2014 - req: 188802 - lq: 0 - tx: 66.0M                             node: dmp-1 - cwd: /opt/bre/CookieMapping/dsWebService - uid: 508 - gid: 503 - masterpid: 25062
     WID    %       PID     REQ     EXC     SIG     STATUS  AVG     RSS     VSZ     TX      RunT    
     7      41.4    25073   78127   0       0       idle    1ms     0       0       25.0M   217637
     5      10.0    25071   18956   0       0       idle    1ms     0       0       6.0M    105123
     8      9.1     25076   17213   0       0       idle    1ms     0       0       6.0M    101432
     4      9.1     25070   17196   0       0       idle    1ms     0       0       6.0M    99265
     6      9.0     25072   17032   0       0       idle    1ms     0       0       6.0M    95653
     2      7.6     25068   14312   0       0       idle    1ms     0       0       5.0M    93229
     1      7.1     25067   13489   0       0       idle    17ms    0       0       5.0M    85652
     3      6.6     25069   12477   0       0       idle    2ms     0       0       4.0M    91285


    发现当使用ab测试时,当并发比较大时候,时间会出现很大的情况


    3  措施

    (1)首先,uwsgi观察到上面的负载不均衡,第7个线程负责的请求数远大于其他的。

    调整使之均衡

    (2)再机器能力足够的情况下,增加线程数目

    (3)建立uwsgi集群,在另外一台机器上也部署此服务,并让nginx转发部分到此

  • 相关阅读:
    MySql使用游标Cursor循环(While)更新数据
    初试TinyIoCContainer笔记
    用Razor做静态页面生成器
    在CentOS6.5上安装MariaDB
    mono的远程调试
    mono3.2.3+Jexus5.5+openSuSE13.1的asp.net
    mono3.2和monodevelop4.0在ubuntu12.04上两天的苦战
    第一节知识点:.net与c#的概念
    支付宝支付功能(使用支付宝sdk)
    vs2017/vs2019 去掉 单击aspx文件预览页面
  • 原文地址:https://www.cnblogs.com/catkins/p/5270490.html
Copyright © 2020-2023  润新知