• 我来也
    2019-03-26
    [D52打卡]
    哈哈,看专栏的同时,也在生产环境中执行下查看套接字的命令.
    居然还发现了一个高并发时的隐患.
    `ss -ltnp`
      有些监听端口半链接队列的值偏小,只有32.而有些都是128.
      赶紧查看程序源码,发现是调用框架的接口时未传递backlog的值,导致使用框架默认的值32.
      哈哈,这个程序是专门处理客户端连接的,虽然目前Recv-Q都为0,但也确实是一个隐患吧.
    `ss -s`
      看到的连接数和各状态数还正常.
    `netstat -s | grep -wE "socket|listen"`
      结果还比较稳定.
    像 sysctl 相关的配置,由于没有权限,就无缘查看了.

    不得不说,综合案例篇的内容真不错.老师也是够狠,设置了这么多的坑.填了一个一个又一个.
    1.内核连接数限制 nf_conntrack.
    2.php程序的工作进程数量
    3.半链接队列偏小,导致高并发时的丢包.
    4.系统分配的临时端口号范围.
    5.系统的端口复用参数配置.

    调优过程中,有时甚至是一波未平一波又起,很是惊险刺激.

    展开
    
     11
  • 2xshu
    2019-03-25
    老师,有个疑问。
    套接字优化部分,你用ss -s输出的两个队列,根据“关于 Linux 网络,你必须知道这些(下)”你讲的内容,当链接处于listening状态是,Send-Q和Recv-Q都是半链接队列,但是你这里却都是调的全连接队列啊?不是应该调整tcp_max_syn_backlog吗?

    作者回复: 嗯,谢谢指出,是文中的步骤不严谨了。实际上应该再加上两步

    1. 查看调优 tcp_max_syn_backlog
    2. 观察全连接的状况之后再调优全连接队列

    
     4
  • xfan
    2019-03-28
    内核选项 tcp_tw_reuse,不是直接修改内核参数就好了么,为什么还有修改后的tag:3 ,这里不太清楚

    作者回复: 嗯 也可以的。打包成镜像的是最后优化的结果

     1
     3
  • ninuxer
    2019-03-25
    打卡day55
    缺乏由现象联想到可能原因的系统性思维~

    作者回复: 还是需要加强原理的理解

    
     2
  • 泡泡
    2019-03-26
    wrk命令-c参数用来模拟连接数为1000,
    为什么输出中的连接数有1910,不理解

    作者回复: -c是并发数,输出中是每秒请求数,不是一回事

    
     1
  • Maxwell
    2019-03-25
    在公司局域网下做性能测试,如何判断网络会不会成为压测的瓶颈呢?也就是说如果开了500线程进行压测,会不会因为网络瓶颈,导致请求无法发送到服务器端?

    作者回复: 可以在测试的时候同时观察一下网络吞吐和丢包(比如使用sar)

    
     1
  • Lane
    2019-03-25
    一天看2篇,终于追上进度了
    
     1
  • burner
    2019-08-13
    老师,系统cpu只用了一半,但是就出现502和499的请求错误,是否意味这应用服务已经过载,还是系统连接数过载,查看netstat发现有28万失败的连接尝试,

    作者回复: 应用过载了

    
    
  • 陳先森
    2019-05-06
    打下卡。
    
    
  • 如果
    2019-04-22
    DAY52,打卡
    
    
  • 腾达
    2019-04-15
    net.ipv4.tcp_tw_reuse = 1 这里是影响到socket的客户端(nginx作为一个客户端连接php的服务端)的行为吗? 不是影响到服务端的time_wait数量? 我弄了个tomcat,用ab压测,tw_use=1, 用ss -s看time_wait 还很高啊,1万多。

    作者回复: 嗯 用在客户端上

    
    
  • 腾达
    2019-04-12
    是的,都对比过了,还包括php的配置,都对比过了
    
    
  • 腾达
    2019-04-08
    老师,针对我提的问题,您的回复是:“不过你可以docker exec到容器内部查看”,我已经逐一对比过容器内的、我已知的参数了。未发现不同。您能否把最后一次的配置参数上传一下到github?

    作者回复: 包括内核选项和Nginx配置吗?

    
    
  • 腾达
    2019-04-05
    有2个问题:
    1、在做perf,制作火焰图的部分,我自己本地看到的函数热点是类似:inet_sendmsg, tcp_write_xmit, e1000_xmit_frame 之类的,后续再对内核参数net.ipv4.tcp_tw_reuse做设置为1的处理后,函数热点依然是这几个。似乎我的机器上的热点是在发送数据,而不是在端口重用?
    2、老师最后1个步骤的镜像,即:
    $ docker run --name nginx --network host --privileged -itd feisky/nginx-tp:3
    $ docker run --name phpfpm --network host --privileged -itd feisky/php-fpm-tp:3
    这2个的配置能上传一下到github吗?我自己依照优化步骤修改的参数,放到镜像里去跑,压测后Requests/sec只能达到: 1919,而是用老师的tag=3的镜像,压测后得到Requests/sec是3107。我把我已知的参数都对比了一遍,如下:
    sysctl net.ipv4.ip_local_port_range='10000 65535'
    sysctl net.ipv4.tcp_tw_reuse=1
    sysctl net.ipv4.tcp_fin_timeout=3
    sysctl net.ipv4.tcp_max_syn_backlog=8192
    sysctl net.netfilter.nf_conntrack_max=1048576
    sysctl net.core.somaxconn=65536
    还有nginx、php的backlog=8192,php的max_children=40(我给了40,不是老师的20)。
    发现都是一样的。不知道哪里有问题。
    老师,你能把优化最后的配置文件上传一份到github吗?
    展开

    作者回复: 优化后的配置没有上传到github里面,不过你可以docker exec到容器内部查看

    
    
  • 腾达
    2019-04-01
    有3个问题:
    1.第一次运行 docker run --name nginx --network host --privileged -itd feisky/nginx-tp这个命令,我参考的是对应的github.com/linux-perf-examples/nginx-throughput/ 下的一些文件知道了参数配置,问题:nginx里的init.sh运行的时候,sysctl修改的网络参数是作用在docker内的nginx?还是作用在宿主ubuntu上?
    2.文章里查看、修改网络参数,并未提示说要进docker容器内部去修改,这个是在宿主ubuntu上做的修改吗?比如说到 sysctl -w net.netfilter.nf_conntrack_max=1048576 这个,是直接在宿主ubuntu上修改的吗?
    3.从docker运行后续集个tag=2,3的镜像开始,例如:docker run --name nginx --network host --privileged -itd feisky/nginx-tp:3 这个命令拉的镜像的参数修改了哪些地方?从哪里可以看到这些参数?
    展开

    作者回复: 1,2: 实际上修改的是Host的
    3: 文章中有讲到,每个镜像使用之前的分析就是修改的内容

    
    
  • code2
    2019-03-28
    用桌面linux分析服务器性能,有些勉强。

    作者回复: 桌面Linux和服务器都适用的

    
    
  • 夜空中最亮的星(华仔...
    2019-03-26
    报个到
    
    
  • Maxwell
    2019-03-26
    Sar测试的只是网络的发送和接收数据吧,好像并不能发现网络的瓶颈导致压测请求无法发送至服务器端?

    作者回复: sar可以查看很多网络统计数据,可以看看-n选项的文档

    
    
  • Maxwell
    2019-03-26
    这个火焰图咋分析?我这边和你的好像不太一样,系统我也是ubantu18.04

    作者回复: 火焰图的介绍在49篇,你可以照着分析下看看

    
    
  • Maxwell
    2019-03-26
    运行最后一次docker镜像,wrk测试结果中还是有很多error(read ),请问这个error指的是什么错误呢?
    Running 10s test @ http://192.168.32.145
      2 threads and 1000 connections
      Thread Stats Avg Stdev Max +/- Stdev
        Latency 97.36ms 22.29ms 394.39ms 90.57%
        Req/Sec 5.01k 1.00k 7.01k 75.00%
      Latency Distribution
         50% 91.10ms
         75% 100.83ms
         90% 117.53ms
         99% 195.90ms
      99832 requests in 10.08s, 20.72MB read
      Socket errors: connect 0, read 11483, write 0, timeout 0
    Requests/sec: 9902.41
    Transfer/sec: 2.05MB
    展开

    作者回复: 看看socket errors这一行,有错误的类型。上面这个结果都是read错误

    
    
我们在线,来聊聊吧