网络分析系列---系统网络配置优化

目录

1.查看发压机性能,无异常.

2.top查看服务器系统负载

      系统cpu,mem,I/O负载低  

 3.ping服务器网络连通性

        发现无异常.

4.ss -s 发现socket统计信息中有大量的timewait连接.

 5.考虑优化连接数

        jmeter并发数设置为50时,建立连接的只有5个.closed+timewait状态的连接有26个

6.dmesg | tail 查看系统日志

        发现有大量nf_conntrack:table full. dropping packet信息:连接跟踪表已满,开

        始丢包!

        这种信息一般是2中内核选项导致:

                1.连接跟踪数的最大限制:nf_conntrack_max

                2.nf_conntrack_count

7.查看nf_conntrack_max和nf_conntrack_count配置:

        sysctl net.netfilter.nf_conntrack_max

        sysctl net.netfilter.nf_conntrack_count

 8.增大nf_conntrack_max配置:

        sysctl  -w net.netfilter.nf_conntrack_max=1048576

 9.重启nginx

        /usr/local/nginx/sbin/nginx -s reload

 10.调优后复测

        吞吐量从个位数上升到了1500+,响应时间和错误率也降了下来.


TCP优化
TCP优化方法内核选项参考设置
增大处于time_wait状态的连接数量net.ipv4.tcp_max_tw_buckets1048576
缩短处于time_wait状态的超时时间net.ipv4.tcp_fin_timeout15
允许time_wait状态占用的端口还可以用到新的连接中net.ipv4.tcp_tw_reuse1
增大本地端口号的范围net.ipv4.ip_local_port_range10000 65535
增加系统和应用程序的最大文件描述符数fs.nr_open(系统),systemtap配置文件的Limit Nofile1048576
增加半连接的最大数量net.ipv4.tcp_max_syn_backlog16384
开启SYNcookiesnet.ipv4.tcp_syncookies1
缩短发送keepalive探测包的间隔时间net.ipv4.tcp_keepalive_intvl30
减少keepalive探测失败后通知应用程序前的重试次数net.ipv4.tcp_keepalive_probes3
缩短最后一次数据包到keepalive探测包的间隔时间net.ipv4.tcp_keepalive_time600

性能测试时nginx应用访问吞吐量下降至很低时该如何定位问题并优化?

1.查看发压机性能,无异常.

2.top查看服务器系统负载

      系统cpu,mem,I/O负载低  

 3.ping服务器网络连通性

        发现无异常.

查看socket连接信息 

4.ss -s 发现socket统计信息中有大量的timewait连接.

        获取 socket 统计信息

        -h, --help 帮助
        -V, --version 显示版本号
        -t, --tcp 显示 TCP 协议的 sockets
        -u, --udp 显示 UDP 协议的 sockets
        -x, --unix 显示 unix domain sockets,与 -f 选项相同
        -n, --numeric 不解析服务的名称,如 "22" 端口不会显示成 "ssh"
        -l, --listening 只显示处于监听状态的端口
        -p, --processes 显示监听端口的进程(Ubuntu 上需要 sudo)
        -a, --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
        -r, --resolve 把 IP 解释为域名,把端口号解释为协议名称

 5.考虑优化连接数

        jmeter并发数设置为50时,建立连接的只有5个.closed+timewait状态的连接有26个

6.dmesg | tail 查看系统日志

        发现有大量nf_conntrack:table full. dropping packet信息:连接跟踪表已满,开

        始丢包!

        这种信息一般是2中内核选项导致:

                1.连接跟踪数的最大限制:nf_conntrack_max

                2.nf_conntrack_count

7.查看nf_conntrack_max和nf_conntrack_count配置:

        sysctl net.netfilter.nf_conntrack_max

        sysctl net.netfilter.nf_conntrack_count

 8.增大nf_conntrack_max配置:

        sysctl  -w net.netfilter.nf_conntrack_max=1048576

 9.重启nginx







        /usr/local/nginx/sbin/nginx -s reload

 10.调优后复测

        吞吐量从个位数上升到了1500+,响应时间和错误率也降了下来.但是吞吐量一段时间后又开始下降.说明TPS不稳定.

应用程序服务端处理情况查看

        查看应用日志:tail -f php-fpm.log

        发现很多告警信息:pm.max_children:表示php进程的最大数量,此处提示最大值为5(进程数越多,同时处理的请求数也就越多,但不是无限制的多,每个进程都会消耗系统资源)

         2.查看系统内存使用情况:free -m

                内存充足

        3.查看应用进程线程数

                vim /etc/php-fpm.d/www.conf

         修改后重启应用服务

        4.调优后复测,发现该警告消除,但是吞吐量现象并未改变.

        5.netstat -s | grep socket查看系统socket统计信息

                socket overflowed:套接字队列溢出

                socket dropped:套接字丢包

        6.压测时对比套接字统计信息,发现有套接字丢包发生,且是因为套接字队列溢出导致.

        7.根据linux网络栈层次,先查看套接字连接数量

                nginx监听队列长度是现在是10,php监听队列长度现在是128.

         1.查看nginx监听队列配置:cat /usr/local/nginx/conf/nginx.conf | grep backlog

        2.查看应用的监听队列配置:cat /usr/local/php/etc/php-fpm.d/www.conf | grep backlog

         3.nginx监听队列配置长度是10,应用的监听队列长度配置是511.此处说明nginx监听队列已满,导致socket溢出.

        4.查看系统套接字监听队列长度上限:cat /proc/sys/net/core/somaxconn

                得出系统和nginx监听队列长度都是10

         5.修改nginx和php应用套接字监听队列长度:

                vim /usr/local/nginx/conf/nginx.conf:10-->8192

                vim /usr/local/php/etc/php-fpm.d/www.conf:511--->8192

         6.修改系统套接字监听队列长度上限:sysctl -w net.core.somaxconn=65500

         7.重启nginx和PHP服务/usr/local/nginx/sbin/nginx -s reload

        8.回归压测验证调优是否有效

8.调优后未发现性能改善

        1.ss -s查看系统套接字统计信息

                发现timewait状态的连接数量更多 ,达到了9469

        2.netstat -ae|grep "TIME_WAIT" |wc -l

                发现很多timewait状态连接占用的端口都没有被回收,被继续占用,导致系统端口消耗过多.

         3.修改系统机制,回收time_wait状态连接占用的端口

                vim /etc/sysctl.conf

tcp_syncookies=1:当syn等待队列溢出时,启用cookies处理,可防范少量syn攻击.默认为0,表示关闭. 

tcp_tw_reuse=1:开启重用,允许将time_wait状态的socket重新用于新的tcp连接.

tcp_tw_recycle=1:将tcp连接中的time_wait状态的socket快速回收.

tcp_max_tw_buckets:增大处于time_wait状态的连接数量

        4.生效修改的配置:/sbin/sysctl -p

 

         5.增大系统可用的随机端口:sysctl -w net.ipv4.ip_local_port_range="10000 65535" 

         6.恢复复测验证调优是否有效:有效.

总结:

        经过优化,TPS能从最初的3增加到3000左右,性能问题的分析调优,应结合网络栈对应用和系统进行.

        1.从连接数开始.

        2.中间件(Nginx进程优化)

        3.套接字优化

        4.端口优化,比如优化time_wait的情况.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值