本文主要内容
下载地址:
https://jmeter.apache.org/download_jmeter.cgi
我下载的版本是 apache-jmeter-5.3。
打开批处理文件:\apache-jmeter-5.3\bin\jmeter.bat。如下图所示:
添加线程组
配置要测试的协议、服务器地址、端口号。配置信息如下:
协议:使用 http 协议。
服务器名称或 IP: www.baidu.com (只是为了演示)。
端口号:80 端口。
如下图所示:
点击播放按钮就开始启动了。注意启动之前需要先设置线程组的参数配置和 HTTP 请求的配置。如下图所示:
主要关心平均值和吞吐量。200 个线程,每个线程调用 100 次,总共 2 万 次,可以看到下图中表格中的样本列也是 2 万,请求所耗费的时间是 151 ms,吞吐量是 880 个请求每秒。如下图所示:
主要看中位数和 90% 百分位,中位数是 59 ms,说明大部分请求的响应时间是 59 ms。90 % 的请求 都是在 271 ms 以内响应完成的。
异常 0.41% 说明 2 万 个请求中有 82 个请求异常(20000 * 0.0041 = 82 )。
吞吐量 880.2/sec 说明百度这个网站每秒能处理 880 个请求,性能一般(可能跟本地机器性能有关)。
如下图所示:
查看汇总图时,需要先勾选想要查看的信息,如下图所示:
然后查看图形汇总:
可以看到勾选的几列在图表中是用不同颜色表示的,比如绿色的柱状条就是 90 % 百分位。
我们来测试下 PassJava(佳必过)的管理后台的性能,吞吐量接近 2000/s。如下图所示:
jconsole 和 jvisualvm 是 Java JDK 的两个小工具,用来监控内存泄漏、跟踪垃圾回收、执行时的内存情况、对 CPU 进行分析、线程的分析。都可以通过命令行启动,而且可以监控本地和远程应用。而 jvisualvm 是升级版的 jconsole。我们先来看下 jconsole 的使用。
首先用 cmd 命令行的方式启动 jconsole。
命令行启动 jconsole
然后选择 passjava 项目的 question 服务。
选择 passjava-question 微服务
对应的就是下面这个微服务:passjava-question。
对应 passjava-question 微服务
从监控界面上有 6 个菜单,首先看到的是概览功能,上面有堆内存使用量、线程数、类的使用情况、CPU 占用率,都是用趋势图来表示的,能很方便的看出当前性能的概览。注意:这些监控都是实时的。
概览
下面是内存的使用情况,可以从下图中看到有个下拉框,里面可以选择不同的内存维度,然后下面的图标和柱状图也会跟着选择的维度而展示不同。
下面是线程的使用情况,可以看到线程峰值和活动线程的总数量,目前看到的峰值是59,活动线程数是 57。下半部分可以看到具体是哪些线程,以及线程的堆栈信息,非常详细。
线程使用情况
下面是类的加载和卸载情况,已加载类总数是 10679,而已卸载的类是 1 个,所以当前已加装当前类的总数是 10679 - 1 = 10678 个。
类的加载和卸载情况
我们再来看下 VM(虚拟机)的情况。如下图所示,可以看到虚拟机情况,线程、类、堆的概要信息,以及 VM 的参数,是不是很方便呀~
VM 概要
接下来我们来看下 MBean 信息。对于 MBean,可能很多同学不知道是啥,下面做个解释:
MBean 就是一种规范的 JavaBean,通过集成和实现一套标准的 Bean 接口,这种叫 MBean。MBean可以用来干嘛?就是可以有一套 JDK 级别的对外的服务接口。比如,你写了一个 JVM 允许状态辅助查询的 Bean,你希望别人下载一个 Jconsole 就可以看到你写的杰作。那你就可以考虑用 MBean 规范来实现。很多垃圾收集器算法 Bean 就这么干的(说的就是这个类 sun.management.MemoryImpl)。
jvisualvm 比 jconsole 更强大,界面展示的信息更丰富。还可以安装插件,太赞了。
启动方式和 jconsole 一样,也是通过 cmd 命令行启动。还是选择 passjava-question 微服务,然后选择第一个菜单栏:概述。可以看到 JVM 的版本,启动参数等信息。
启动jvisualvm
监视 CPU、堆、类、线程的情况。整体显示的效果比 jconsole 更美观。
监视
再来查下线程的情况。可以看到有 5 种状态的线程:
另外我们也可以抽样器对 CPU 或内存进行抽样。如下图所示,对内存进行抽样。
抽样
安装步骤:工具→插件→可用插件→Visual GC→安装。安装完成后,重启就可以使用插件功能了。
安装完成后,就可以看到:
Visual GC 插件
下图是实时监控垃圾回收的情况。
Visual GC
现在我想对 Passjava 系统的 question 微服务的接口进行一个压测,该如何进行呢?
首先我们来看下 passjava 的架构是怎么样的,如下图所示:
客户端分为手机端和 PC 端,http 请求先经过 API Gateway,然后再转发到 question 微服务。其中涉及到了中间件:Gateway 网关。
我们来对 Gateway 网关进行压力测试。
网关的端口号是 8060,我们配置下 JMeter。如下图所示:
配置每秒发送 200 个请求,一直循环执行,直到手动停止压测。如下图所示:
可以看下执行结果,吞吐量在 2422 个每秒,还是比较高的。
吞吐量:2422/s 。
90% 响应时间:142 毫秒。
99% 响应时间:281 毫秒。
我们再来看看垃圾回收的情况,Eden 区垃圾回收用时 2.7 s,用时太长了吧,看看这里怎么能优化下。
通常的优化方向是增大新生代堆内存配置。
根据上面的架构原理图,我们知道客户端请求都是经过 Gateway 转发了一次的,如果我们想单独看下微服务的性能该怎么测试呢?下面我来演示下如何测试 passjava-question 微服务的性能。
首先需要在 passjava-question 微服务中添加一个测试方法:
测试方法有两种方式测试这个 API 是否添加正确。
第一种用 postman 测试下这个请求是否能正确响应,返回 “test” 则表示响应正确。
test api 是否能正确响应第二种通过浏览器进行测试。浏览器地址栏输入以下链接后,回车,看下浏览器窗口是否显示 “test”,是则表示响应正确。
然后我们需要用 Jmeter 压测工具来测试这个微服务下的 API 的性能究竟如何。
单独压测微服务的 api的结果
吞吐量:3542/s 。
90% 响应时间:100 毫秒。
99% 响应时间:152 毫秒。
如果我们想对这个整个请求链路进行性能测试该怎么做?
首先请求需要先经过网关,然后由网关转发到微服务。在之前的文章中,我已经将网关配置好了,所以要想通过网关转发到 test 请求,只需要对请求路径稍作修改即可,如下所示:
http://localhost:8060/api/question/v1/admin/question/test
然后在浏览器输入该网址,返回 “test” 即表示响应正确。
然后我们还是用 Jmeter 压测工具测试下 test api 的性能。测试结果如下图所示:
网关+微服务的压力测试结果
从结果可以看到:
吞吐量:982/s 。
90% 响应时间:437 毫秒。
99% 响应时间:790毫秒。
这里做个横向对比:
横向对比
说明微服务 API 经过网关转发一次后,性能至少下降了一半。可以得出结果:中间件越多,性能损失越大,大部分损失都是网络交互导致的。可以通过增强网络通信质量来减少网络的延迟。
一般情况下,出现性能问题更多的是业务中查询数据库的耗时。接下来看下如何优化数据的查询。
下面是一个查询问题列表的 API:通过问题类型 type 字段过滤问题列表。API 路径如下:
http://localhost:11000/question/v1/admin/question/list?type=5
这个 API 的代码如下,很容易看懂。
查询问题列表的 API
我们加些测试代码:统计查询数据库的耗时。如下所示:
耗时统计
然后重启 passjava-question 服务,再次测试这个 API,耗时 43 ms。
怎么对查询进行优化呢?很容易想到加索引,我们来试下加在 question 表加索引后的效果。给 type 字段加上普通索引,如下图所示:
添加索引
我们再来看下加了索引后的耗时情况:耗时 18 ms,确实比之前的 43 ms 快了很多。
加了索引后的情况
我们可以通过 jvisulavm 工具查看垃圾回收的情况,Eden 区频繁发生 GC,短时间(1分钟)内共造成了 480 次 stop the world。另外从压测工具中也可以看到,吞吐量为 275/s。
原因是 Eden 区的内存分配得太小了,只有 32 M,我们来调大一点。
32M Eden 区频繁进行垃圾回收
通过在 IDEA 工具中配置以下参数,调整堆内存最大为 1024 M,新生代内存为 512 M。
-Xmx1024m -Xms1024m -Xmn512m
然后可以观察到在相当长的短时间(1分钟)内只进行了 92 次垃圾回收,说明垃圾回收的频率降低了。应用程序的性能也提升了。另外从压测工具中也可以看到,吞吐量为 347/s,吞吐量也有较大提升。
本文通过压测工具 Jmeter 讲解压测如何实施,然后用性能监控工具 jconsole 和 jvisualvm 来监控 Java 应用程序的性能,以及如何用工具来优化开源项目 passjava 的性能,并且非常详细地介绍了每一步以及执行结果,通过对比的方式,更加清晰地知道如何做性能优化。
下面是对系统性能的常规优化手段:
参考文档
本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/Px5-VE_WHGM9uQHqygcVEg
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。