• 吞吐问题--3


     开始优化应用层!!

    目前可以看出问题如下:

    • select 耗时太多!!!!
    •  read  系统调用的errors次数占比13% 这是一个问题
    • read的次数太多,是不是可以调大接收缓存减少read 次数,同时使用zero_copy  tcp  : A reworked TCP zero-copy receive API
    • write 次数比read 还多,应该可以使用聚合接口
    • socket bind ioctl 使用了3178次,那么client  server fd 为 3178*2=6356  及时使用setsockopt 设置TCP_NODELAY 、SO_REUSEADDR、
      SO_RCVBUF/SO_SNDBUF 、SO_KEEPALIVE  、SO_REUSEPORT、TCP_DEFER_ACCEPT 、SO_LINGER等 但是次数不至于达到27.8w次
    • epoll_ctl比较频繁 远大于3178 目前为5.2w
    • recvfrom 失败出错率较高50%
    • 使用close 后继续使用shuwdown 通shutdown 出错率大约为50%
    • futex 有必要吗?
    • restart_syscall 太耗时

    当前模型:

     明显存在竞争资源瓶颈

    使用如下模型测试一下:

    结果为:

    perf stat -p 9880  sleep 10
    
     Performance counter stats for process id '9880':
    
          30372.082735 task-clock-msecs         #      3.037 CPUs 
                340714 context-switches         #      0.011 M/sec
                   288 CPU-migrations           #      0.000 M/sec
                   150 page-faults              #      0.000 M/sec
           65299950534 cycles                   #   2149.999 M/sec  (scaled from 66.24%)
           12797366330 instructions             #      0.196 IPC    (scaled from 83.37%)
            3284418549 branches                 #    108.139 M/sec  (scaled from 83.17%)
              15383662 branch-misses            #      0.468 %      (scaled from 83.69%)
             195263517 cache-references         #      6.429 M/sec  (scaled from 83.42%)
              29353131 cache-misses             #      0.966 M/sec  (scaled from 83.49%)
    
           10.000647442  seconds time elapsed
    
    perf stat -p 9880  sleep 10
    
     Performance counter stats for process id '9880':
    
          30754.416664 task-clock-msecs         #      3.075 CPUs 
                341624 context-switches         #      0.011 M/sec
                   358 CPU-migrations           #      0.000 M/sec
                   121 page-faults              #      0.000 M/sec
           66197865785 cycles                   #   2152.467 M/sec  (scaled from 66.21%)
           12878834358 instructions             #      0.195 IPC    (scaled from 83.57%)
            3319059775 branches                 #    107.921 M/sec  (scaled from 83.42%)
              15481326 branch-misses            #      0.466 %      (scaled from 83.72%)
             194900683 cache-references         #      6.337 M/sec  (scaled from 83.63%)
              28394751 cache-misses             #      0.923 M/sec  (scaled from 83.03%)
    
           10.001158953  seconds time elapsed

    虽然解决了惊群以及多线程抢占 listen fd 问题

    对比以前的stat结果:

    perf  stat -p 9884 sleep 10 
    
     Performance counter stats for process id '9884':
    
         200815.127256 task-clock-msecs         #     20.075 CPUs 
               2456764 context-switches         #      0.012 M/sec
                  1294 CPU-migrations           #      0.000 M/sec
                  3583 page-faults              #      0.000 M/sec
          430791607582 cycles                   #   2145.215 M/sec  (scaled from 66.57%)
           63233677155 instructions             #      0.147 IPC    (scaled from 83.19%)
           18174748495 branches                 #     90.505 M/sec  (scaled from 83.19%)
              70154714 branch-misses            #      0.386 %      (scaled from 83.45%)
             806455643 cache-references         #      4.016 M/sec  (scaled from 83.36%)
             164527072 cache-misses             #      0.819 M/sec  (scaled from 83.44%)
    
           10.003181505  seconds time elapsed

    perf  stat -p 9884 sleep 10 
    
     Performance counter stats for process id '9884':
    
         203748.965387 task-clock-msecs         #     20.373 CPUs 
               2274598 context-switches         #      0.011 M/sec
                  1768 CPU-migrations           #      0.000 M/sec
                  3570 page-faults              #      0.000 M/sec
          438541182863 cycles                   #   2152.360 M/sec  (scaled from 66.80%)
           63421130555 instructions             #      0.145 IPC    (scaled from 83.34%)
           18428625598 branches                 #     90.448 M/sec  (scaled from 83.23%)
              69229085 branch-misses            #      0.376 %      (scaled from 83.41%)
             770039314 cache-references         #      3.779 M/sec  (scaled from 83.14%)
             158705951 cache-misses             #      0.779 M/sec  (scaled from 83.48%)
    
           10.000827457  seconds time elapsed

     使用perf stat 统计 分析:目前这种改动有一定提升;同时 cps 大约为6w

    对于网络架构:目前认为可以做出如下考虑

     

    http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子
  • 相关阅读:
    spring cloud 学习(Gateway)网关
    spring cloud 学习(Hystrix)熔断器
    spring cloud 学习(Feign)分布式配置中心
    老子道德经-帛书甲本
    重新执行mysql索引
    有关maven2路径
    关于Mysql含有blob字段的查询效率问题
    提交Json参数到Tomcat报400错误的问题
    不知道算不算mysql的漏洞
    JFinal项目中,如何连接两个不同版本的mysql数据库?
  • 原文地址:https://www.cnblogs.com/codestack/p/14663926.html
Copyright © 2020-2023  润新知