性能压测诡异的Requests/second 响应刺尖问题

  • 时间:
  • 浏览:0
  • 来源:5分6合APP下载_5分6合APP官方

(并都在说所有性能间题都能否 及时优化,只要保证能撑得起业务量的一定范围就好,并且我性能优化无止境,能否 把握好节奏。)

现在基本上是rabbtimq服务器的性能间题了,并且我想要觉得间题找到了。并且我我还是无解,为哪些地方经常出先你这个 间题,为哪些地方时间没人规律,肯定有蹊跷,继续排查,到底是rabbtimq服务器的CPU间题还是disk间题,还是network间题。这次重点看下top。

你这个 点能否 通过rabbtimq queue的dashboard 中的publish in 和 publish out才查看,publish out 是publish in * queue的数量。

顺便看了下配置文件,发送消息走的是qa环境,你这个 我知道,并且我当时压测环境的rabbitmq一时还没好,并且我当我们都当我们都走的是先定义再使用queue的流程,你这个 并且我要用我能否 先上去配置好也能使用。当时图省事就先用了,自己压测下来也没啥间题,毕竟MQ的设计吞吐量都很高的,TPS足够当我们都当我们都用的,再添加我并且我也压过qa的MQ没啥间题。

5.排查

network:

最近一段时间都在忙着转java项目最后的冲刺,前期的coding翻代码、debug、fixbug都逐渐收尾,进入上线前的性能压测。

JAVA GC:

立马去看下服务器的GC监控,一并看下进程运行的GCer配置是CMS。(CMS主要出理 低延迟间题《深入理解JAVA虚拟机》)

觉得你这个 并且我有两个多 结论,你这个 服务器觉得没人瓶颈,不管是应用服务器还是DB、cache。那间题应该是在进程运行方面。(性能分析由上至下、由下至上集合分析《java性能优化权威指南》)。

也是比较奇怪的,receive到是挺正常的,send基本为0了,感觉像是某个调用并且我发送停止了,能接受请求,并且我对下游的调用貌似停止了。

搞来了qa环境的rabbitmq服务器账号,一并打开rabbtimq管理界面中的dashboard。始于了了重点关注这台服务器。(top命名打开,P\M看下rabbitmq各项指标。)

始于了了尝试排查依赖服务,下单服务主要依赖商品、促销。cache都在间题,并且我本地有一级缓存,并且我缓存的过期时间对不上,压测环境的redis和MySQL在一台机器上。你这个 DB没人间题,基本上redis应该也没啥间题。(这台机器很强悍)还有部分的依赖业务方的接口我并且我注释掉了,不多有依赖。

提交横向压测前当我们都当我们都能否 自己先过一遍,你这个 也能加快压测的效率单位,并且我时间比较紧再添加客观的环境间题,我将服务中几块没人压测环境的依赖添加。(有关压测的你这个 实践我将在下篇文章好好总结下,这里就不展开了。)压测了几轮(时间差不多50分钟左右。),消除了你这个 环境、代码、依赖的障碍,提交横向走压测流程,接着就去忙你这个 的事情了。(诡异的间题比较多~_~,mybatis pagehelperplugin好像就一阵一阵并发间题,还没定位到,真不知道是用的不对还是哪些地方情况汇报,继续排查,有结论了我在总结分享下。)

又尝试用持久化queue来压测一把,看下到并且我啥情况汇报,仔细盯着rabbtimq dashboard,你以为又经常出先了。(计算机间题永远不指在巧合,不选用。)

始于了了排查进程运行池间题,否有有block进程运行,通过jstack 打印出进程运行,基本上都在XNIO的condition wait,也没人啥不正常。并且我下单服务的你这个 接口都挺正常的,进程运行池间题应该不大。下单成功并且我有意个hold的场景,你这个 hold虚拟币、卡券码等等类式的逻辑,这底下使用了fiexd进程运行池(5个,设置了饱和策略及日志输出。),间题你这个 大。

提交横向第二轮压测。

8.总结

结果很遗憾,没啥线索,性能很好。

3.查看DB情况汇报:

没发现fullgc,再看下几块你这个 的系统资源否有有异样。

重点是关注下JAVAGC 容量:(java进程运行的内存分配由“内存分配器+GC完成”《java性能优化权威指南》)

觉得都在大促前的性能压测要求,并且我为了安全起见,能否 摸个底心里有个数。

并且我这次压测主要重点是关注正向的两个多 核心订单服务,下单服务、查单服务。查单服务初步压测下来间题不大,主你这个 db的索引和cache的间题。

基于你这个 推理,我考虑用两个多 空exchange来接受消息,根据原理指导,exchange收到消息并且我并且我发现没人任何queue能否 投递就直接丢弃了。

在基于你这个 推理,我用了两个多 不持久化的queue来接受消息,也你这个 说你这个 消息是不多持久化的,cpuwait应该是0。

/**发送消息*/

template.convertAndSend(messageConfig.getExchangeName(), routingKey, message, amqpMessage -> {

废话不多说了,直接进入主题。

翻了下资料,没啥特殊的使用要求。

早上起来看没经常出先那个间题。为哪些地方我用不持久的queue还有间题,并且我你这个 queue是没人任何consumer的,这并且我涉及到rabbtimq的底层原理了。rabbtimq用的是erlang语言写的,看源码一时半会估计路都没人了。还是想你这个 妙招 。

为哪些地方会有没人大的disk write。并且我极少量的磁盘写入,原因publish消息的并且我block了。具体为哪些地方会你这个 想要去研究rabbtimq源码了。哪些地方地方在rabbtimq的配置中应该有策略的,并且我都在没熟悉rabbtimq,你这个 这里就只好先告一段落了。

1.压测报告:

并发用户数没变化,平均响应时间没变化,并且我request/second奇怪了。我相信大多数开发的直觉你这个 fullgc了,我也一样。

4.分析

不到上大招了,始于了了尝试注代码,并且我压测,逐个尝试,先注释DB、并且我进程运行池hold逻辑、并且我发送消息。(无赖之举。。。)

memory:

当我们都当我们都注意看下,DB的网络流量图,它你这个 比较正常的,没人请求没人发送。而应用服务器一阵一阵说不通,不到进来的没人出去的,这段时间内到底在干嘛,并且我分布很平均。

(我一时蒙蔽,我擦哪些地方情况汇报。)调整了下,仔细看了下那个刺尖的经常出先的时间比并且我长了。你这个 至少十五分钟,现在要半小时。并且我qa环境机器没人安装压测监控工具,真不知道那段时间里指在了哪些地方。(压测执行时间1小时)

遇到间题一定要搞清楚根源,就算没人了根源也知道把它限定在某个范围内,比如限制到DB、操作系统等等。

cpu:

也你这个 说发送消息都在发送给exchange就始于了了了,当我们都当我们都配置的是topic模式,你这个 消息类型底下有两个多 queue,一并这几块queue都在消费者在获注销费消息。并且我并且我获注销息的妙招 是pull模式,你这个 会指在多大的并发获注销息的情况汇报。并且我哪些地方地方queue底下的消息都非常多,当我不压的并且我CPU你这个 高,pull消息的开销对服务器来说network多点,CPU不多不多。

当我们都当我们都分析下,receive、send不配对原因分析哪些地方,当我们都当我们都有50并发,延迟1秒启动,基本上跑上个十几分钟,你能至少想象出50并发的请求空间路线图么。觉得它会呈现出每秒钟都在请求进来,这是压力机的请求,每秒也会有请求出去,去访问它所依赖的服务并且我底下件。并且我,当我们都当我们都设想从压力机为始于了了点,把请求和响应想象成两个多 圆,那在圆的任何两个多 深层上都在请求和响应。

同样间题的经常出先CPU不正常,并且我wait 率比较高。是都在能否 你这个 推理,wait率高了,原因极少量进程运行(子进程运行运行)挂起,你这个 看起来CPU利用率占的就高,也说的通。(先没人假设,来验证它就知道了)

等我尝试注释掉发送消息的逻辑并且我发现间题不经常出先了,有希望了。始于了了进去看代码,没啥逻辑,走的是spring 的RabbitTemplate.convertAndSend 妙招 。(这是个同步妙招 ,没人任何声明说他是async的。)

我并且我都在50分钟,我尝试用空exchange压了一小时(已是周五晚24:00点左右,洗澡睡觉,明早上看结果)。

注意看下图中的In memory,shit你这个 落盘了,哪怕你设置不持久化为了内存利用率,它会将消息落盘,注意看Persistent没人任何消息。消息总量1.1G,内存中不到119MB。

始于了了排查日志,restful-slow.log,jdbc-slow.log、错误日志等等,一顿cat… grep…wc –l,啥也没人异常。(shit始于了了冒汗了。。。)

上图中的cpu wait率一阵一阵不正常是并且我exchange同步写两个多 queue且落盘,你这个 有你这个 间题。

压测下来一切正常,cpuwait为0(心情无比的顺畅)。

刺尖的几块点CPU idle 基本都在50%,us也是0%,非常奇怪。再看下你这个 的资源。

我进程运行底下基本上没人用到哪些地方极少量的磁盘操作,基本上就两个多 日志输出,别的没人了。(linux cache区不管是读还是写完会被cache住,会在cache里维护两个多 逻辑地址空间。我将在下篇文章中演示出来,每当我删除磁盘的日志文件,cache区完会瞬间释放。https://www.ibm.com/developerworks/cn/linux/l-cache/index.html)

毕竟这次转java的服务都在集团核心公共服务(主你这个 订单域服务)。(等当我们都当我们都顺利上线了,我再来好好总结下其中的坎坷和壮举。)

7.打脸

压测下来一切正常,没人经常出先刺尖情况汇报(真爽~_~),cpuwait 正常0。基本上定位到间题了。是并且我rabbtimq并都在的负载严重不足了,性能跟不上你这个 原因你这个 间题,这也算加深了rabbtimq的部分原理。

6.浮出水面

创建订单逻辑稍微多样化点,对付近的系统及底下件依赖也比较多,你这个 能否 重点关注,至少心中要有数,哪怕下游的哪个服务的性能有间题,在下次大促的之能否 能优化掉。

下单服务有两个多 核心接口,预订单查询、创建订单。预订单查询主你这个 订单的前置情况汇报的结算页汇总计算(不仅是结算页),不落具体订单,如,各种促销、卡券码、虚拟币的规则计算等等。

等我在开会的并且我,压测兄弟找我,哥哥那个间题又经常出先了。

有你这个 我想要肯定,根据rabbtimq推送消息原理,两个多 消息能否 发送给所有监听的queue,哪些地方地方queue能否 落盘才算这次publish成功,才会返回。(能否 参考《Rabbitmq in Action》)

能隔离环境的尽量隔离,排查环境间题最头疼,并且我有并且我又无法出理 。(下篇压测文章分享下,环境间题的排查妙招 和工具)

底下图蕴含一幅图一阵一阵间题,真不知道当我们都当我们都看出来了没人。你这个 我下单服务的应用服务器的网络流量有间题,receive、send对不上。

2.查看服务器监控情况汇报:

这是压测的下单服务机器资源情况汇报。

(资源没隔离是并且我你这个 客观原因,有并且我压测环境是临时搭建的。用到qa环境的底下件还有codis,并且我codis基本是二级缓存,你这个 间题不大,先过。(回头没辙再来找它。)

看了下DB情况汇报,也没啥异样,都在在相同的时间点,一下子负载没人了,时间都能对上。网络、磁盘、CPU都没人活动。

始于了了怀疑商品、促销,并且我我并且我分别对这两个多 服务进行过压测,这两个多 服务基本上都在命中cache,QPS基本上接近1500。现在也只好对这两个多 服务再进行一轮完整版的压测。

间题一如既往的经常出先了(我并且我能接受了~_~,它你这个 不经常出先我才想死尼,并且我来回折腾并且我了。)很好,rabbtimq dashboard也经常出先刺尖了。

内存咋一看好像一阵一阵间题,并且我了解linux 内存计算妙招 和使用原理都知道这觉得间题不大。(下篇文章中会具体讲解关于压测的并且我各个指标怎么才能 才能 查看和计算,在压测并且我重点关注top中的swap区。)

猜你喜欢

5月云栖社区最新技术活动预告

主题:PostgreSQL体系化系列直播—第六章:备份、恢复、容灾时间:2019年5月15日讲师:周正中(德哥)阿里云数据库首席专家服务成员之一,PostgreSQL中国社区大

2020-01-28

怎么判断男生是否喜欢你

出于雄性的领地意识,男生在亲戚亲戚亲戚朋友肩头,谁会喜欢说买车人女亲戚亲戚亲戚朋友的事情很多呢,害怕被人惦记上,但会 会在与亲戚亲戚亲戚朋友交流之中无形宣告 主权,确认你的

2020-01-28

男友对我说对你还有什么舍不得的,他什么意思?

扫描二维码下载使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。展开完整版想跟你继续交往啊展开完整版也却说 说他都不能选择离开你,却说 心里还是有

2020-01-27

分享几款一键搭建php本地测试环境工具

好多好多 朋友平时电脑做服务器都还可不可以 搭建iis服务器,今天我给朋友分享有几只一键搭建php本地测试工具!,喜欢做网站论坛的朋友为了使被委托人的站点并能具有独特的

2020-01-27

开发函数计算的正确姿势——网页截图服务

开发函数计算的正确姿势——本地运行、调试、发布NAS函数开发函数计算的正确姿势——HttpTrigger本地运行调试开发函数计算的正确姿势——移植Express微信H5中静默登

2020-01-27