前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于dubbo服务性能调优实战(1)

基于dubbo服务性能调优实战(1)

作者头像
jmeter技术研究
发布2020-05-12 10:44:33
8560
发布2020-05-12 10:44:33
举报

性能压测场景 1、本次需要对查询接口进行100、200、500并发逐渐递增方式进行性能压测 2、在压测过程中,100、200并发响应时间、吞吐量、报错率为0,满足性能需求 3、当并发用户为500时,报错率达到22%,此时经过监控服务器,发现服务器cpu、内存、硬盘、网络、应用服务gc情况未出现异常,满足指标 4、经过排查,本次应用服务使用的是Dubbo服务,通过修改jmeter断言,返回响应结果提示threadpool is exhausted ,detail msg:Thread pool is EXHAUSTED!,通过检查dubbo服务配置,threads只有200,当线程数大于200,就会报系统繁忙,请稍后在试,将该设置改为1000,500并发压测未出现报错,满足性能需求 5、本文记录下优化前测试结果、监控服务器(linux)资源方法、优化方法、优化后测试结果

一、优化前测试结果

代码语言:javascript
复制
1.100并发测试结果
代码语言:javascript
复制
2.200并发测试结果
代码语言:javascript
复制
3.500并发测试结果

二、服务器资源监控

代码语言:javascript
复制
1.网络资源情况:可以使用 sar -n DEV 10 120 命令,10代表10秒执行一次,总共执行120次,由下图可见 rxkB/s:每秒钟接收数据量,单位kb,  txkB/s:每秒钟发送数据量,单位kb ,每秒接收和发送没超过6M每秒,可以使用ifconfig命令查看网卡名称,然后使用ethtool eth0  查看当前服务器的带宽配置,由截图可知,当前网速带宽万M,每秒传输可达1000多M每秒,使用率不到1%,6M不考虑网络瓶颈
代码语言:javascript
复制
2.硬盘读写情况:可以使用iostat -x k 1 5命令,1代表1秒执行一次,总共执行5次,由图可知,总共有5块磁盘,磁盘最大读取900kb/S,最大写入2.2M/S,目前磁盘读取写入速度都是100M以上了,2M不考虑磁盘瓶颈,也可以关注%util指标,%util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态
代码语言:javascript
复制
3.cpu负载情况:可以使用uptime命令,while true; do uptime; sleep 60; done 该命令能持续执行uptime命令,每隔1分钟执行一次,显示最近1、5、15分钟cpu负载情况,由下图可知,负载量最高为5,该服务器cpu核心数为4(上面硬盘、网络命令均有显示4CPU),如果超过4*1.7=6.8,考虑负载过高,sar - u 10 120,该命令用来查看所有cpu的使用率,由下图可知user+system的cpu使用率75%,未超过90%,不考虑CPU处理瓶颈,也可以使用 sar -P 0 1 2命令跟踪具体的cpu, 该命令0代表第一块CPU
代码语言:javascript
复制
4.内存使用情况 :使用free命令即可下图的while true; do free; sleep 10; done为每10秒执行一次,由图可见8G内存只使用了2.1G,可被应用程序使用的物理内存还有4.4G,不考虑内存瓶颈
代码语言:javascript
复制
5.应用服务(java类型)监听:首先输入jps -l ,该命令是显示当前系统所有的java进程,最前面显示的是进程id,找到当前应用服务的进程id,输入jstat -gcutil 29033 10000    29033代表进程id,10000代表10秒输出一次,该命令是跟踪java进程内存使用情况,由图可知FGC(主要关注该参数,代表回收老年代,每次回收应用都需要等待)总共发生了6次,压测期间没有增加,FGCT是FGC耗时24秒,如果频繁fgc考虑调整该服务内存大小,该服务进程内存满足需求
代码语言:javascript
复制
6.下图使用nmon进行监控,推荐使用该开源工具,./nmon -f -s5 -c10代表每隔5秒采集一次,采集10次,该工具可以监控到cpu、内存、硬盘、网络各种指标

三、优化方法

代码语言:javascript
复制
1.第二章监控了服务器的cpu、硬盘、内存、网络都满足性能要求,未出现异常,最后通过查看测试结果输出的HTML报告,看到系统返回报错的响应结果中提示duboo服务线程已经耗尽,最大线程数数为200
代码语言:javascript
复制
2.经过查看dubbo服务器配置,发现配置的线程数只有200,修改线程数为1000,在执行性能压测,结果满足指标,修改指标参考下图
代码语言:javascript
复制
3.参考地址  http://www.voidcn.com/article/p-bmgbfqvq-brm.html

四、优化后的测试结果

代码语言:javascript
复制
1.500并发测试结果如下:未出现异常
代码语言:javascript
复制
2.执行日志

五、性能瓶颈调优层级

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

本文分享自 jmeter相关技术交流 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档