前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[性能测试实战30讲」之问题问答整理十八

[性能测试实战30讲」之问题问答整理十八

作者头像
高楼Zee
发布2020-05-09 14:58:05
5840
发布2020-05-09 14:58:05
举报
文章被收录于专栏:7DGroup7DGroup

带宽问题是性能分析中常见的问题之一,其难点就在于,带宽不像 CPU 使用率那么清晰可理解,它和 TCP/IP 协议的很多细节有关,像三次握手,四次挥手,队列长度,网络抖动、丢包、延时等等,都会影响性能,关键是这些判断点还不在同一个界面中,所以需要做分析的人有非常明确的分析思路才可以做得到。而且现在的监控分析工具中,对网络的判断也是非常薄弱的。

思考题:

结合今天的内容,你能说一下网络的瓶颈如何判断吗?有哪几个队列?

读者:

对于性能分析来说,带宽能不能对得上非常重要。比如,客户端接收了多少流量,服务端就应该是发出了多少流量。如果服务端发了很多包,但是客户端没有接收,那就是堵在队列上了。 关于这一段话,我想请问下,为什么没有提到客户端发出请求的流量大于服务端接收的情况?这种情况需要考虑吗?如果要考虑的话,通常会出现哪几种现象,要如何分析

作者回复: 对于网络来说,不分客户端,服务端。只要分发送和接收端就可以。

并且,也不会出现某一端发的大,另一端接的少的这种情况,接收端接不了,发送端肯定就排队去了。

所以,你说的其实是一种现象。

读者:

1)查看服务器发包数量,客户端接口数据包的量是不基本一致,如果出现明显的差别,可以基本确定客户端网络问题 2)查看jmeter聚会报告上面客户端接口数据量是否已经接近宽带的限制 队列: 服务端消息发送队列 客户端接收数据的队列 服务端超时队列

作者回复: 1,当网络有问题的时候,主要看队列,不用再对比流量了,因为已经没有意义了。

2,对。

思考题:

这一篇文章延续上一篇的分析思路,你能讲一下 Swap 的原理和逻辑,以及分析思路吗?另外,慢 SQL 如何定位出来呢?

读者:

在虚拟机或dock环境中可进行性能测试吗?

作者回复: 这个问题过于宽泛了,但是本着认真的态度,还是回复一下吧。

对于性能测试环境,只有一个可信的答案,那就是:和生产一致。

生产用什么配置,测试就用什么配置是最靠谱的。

但是我们经常会遇到的是硬件环境会有区别。所以经常会有人在硬件不同上钻牛角尖,而不去考虑系统特性以及什么资源影响最大。

如果是CPU资源使用最多,我们只要去对比CPU能力也能比较个大概。

而虚拟机和docker能不能用于性能测试?当然可以。不管什么环境,都可以用于性能测试。

而现在我们用于应用级别的机器基本上都是虚拟机和docker。这必然是可以用的。

其核心是,这套硬件能提供的能力到底是什么样。而不用纠结是虚拟机还是docker还是物理机。

读者:

高老师,请教下JVM配置是用哪种测试场景去调优呢。比如系统有好几个应用,测试场景也有基准测试、混合测试,那是测基准测试时去调优JVM配置?还是混合测试时?还是所有的场景都要去做这个JVM调优配置?如果出现多个场景JVM的最佳配置不一样,是以哪个为准?

作者回复: 这个没有区分,什么场景下发现问题就什么时候调。

思考题:

这是个刁钻的案例,你能说一下为什么在本例中,最后想到了看防火墙呢?以及,为什么说 timewait 的 TCP 链接只是问题的现象呢?

读者:

读完老师的文章,有下面几点疑惑 1. TCP 四次挥手中,主动断开链接的一方才会处于 TIME_WAIT 状态呢,老师在文中有说 客户端主动断开,服务端也会出现 TIME_WAIT 状态,这是什么情况呢? 2. nf_conntrack 模块对 TCP 链接进行追踪,然后 nf_conntrack 的表有限制,表满了就丢包,这个因导致了服务器出现大量的 TIME_WAIT 状态,但为什么反应到 TPS 是锯齿状呢?一会儿好,一会儿坏,就算是 nf_conntrack 表会释放,难道还会瞬时释放很多,这样 TPS 就上去了,然后又满了,TPS 又下降? 思考题 1.如何在分析一通后,最后定位到防火墙? 因为老师在经过对操作系统的 CPU、I\O、内存等资源还有数据库、Tomcat、Nginx 等监控数据没有发现什么问题,最后定位到网络连接状态有问题,即出现了大量的 timewait 状态的链接,然后老师想通过修改 TCP 相关的参数来达到复用处于 timewait 状态的链接(这些参数的本质是释放服务端的句柄和内存资源,但不能释放端口,而 源IP+源端口+目的IP+目的端口+协议号才是 TCP 五元组),修改完后没有解决问题 然后老师分析客户端主动断开时,服务端也会处于 timewait 状态(这块是我疑惑的,应该是主动断开链接的一方才会处于 timewait 状态),然后打开了 Nginx 的 proxy_ignore_client_abort 配置,即让 Nginx 忽略掉客户端主动断开时报的错,但问题还是没有解决,然后把 Nginx 和 Nginx 所在服务器也换了,问题没有解决。 开始考虑操作系统层面,网络收发数据那儿可以通过查看发送端和接收端的 Recv_Q 和 Send_Q 这四个队列是否有值,来判断瓶颈点,然后没有发现问题。 在最后才考虑防火墙了 2.为什么 timewait 的 TCP 链接只是问题的现象? 因为能引起链接处于 timewait 状态的原因还是有很多的,这就需要不断透过现象看本质,根据不断地排查锁定最根本的原因

作者回复:

问题1,由于客户端异常断开,未发送fin包。服务端并不知道。当服务端探测到客户不在时,只能自己主动断开,故而有timewait出现。

问题2,nf_conntrack表满了会被清理,而tcp会重连,这时响应时间会增加,所以tps掉下后会再上升。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 7DGroup 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档