接口性能测试复盘:解决JMeter超时问题的实践

在优化接口并重新投入市场后,我们面临着一项关键任务:确保其在高压环境下稳定运行。于是,我们启动了一轮针对该接口的性能压力测试,利用JMeter工具模拟高负载场景。然而,在测试进行约一分钟之后,频繁出现了“连接超时”的错误信息,即“Failed: Connection timed out”。这不仅阻碍了我们构建一个持续稳定的压力测试环境,还对准确评估系统承载能力带来了挑战。
在这里插入图片描述

问题排查与解决方案概览:

nginx问题排查

端口耗尽问题是一种常见的网络资源瓶颈,特别是在高并发的测试或生产环境中。当一个服务器在短时间内需要处理大量的网络连接时,如果可用端口数量不足,就会导致新的连接请求无法得到及时响应,从而引发服务延迟或失败。

  1. 端口耗尽问题的初步分析

    • 在这个问题中,初步分析指出错误源于JMeter客户端无法及时与服务器建立TCP连接。JMeter是一款常用的性能测试工具,它通过模拟多个用户同时访问服务器来测试系统的性能。
    • 监控工具的检测显示,部署了nginx的服务器端口占用量达到了6万个,接近了TCP/IP协议定义的端口上限(65535个)。这表明服务器正在处理大量的网络连接,端口资源变得非常紧张。
  2. 解决端口耗尽问题的措施

    • 减少并发线程数:通过降低JMeter发起的并发连接数,可以减少同时向服务器发起的连接请求,从而减轻对端口资源的压力。
    • 调整nginx配置:将nginx配置调整到8核16GB的资源,可以增加服务器处理连接的能力。这可能包括增加工作进程数、优化内存和CPU使用等。
    • 成功缓解端口资源紧张的问题:通过上述措施,服务器的端口资源得到了更有效的管理,减少了端口耗尽的风险。
  3. 监控端口使用状况

    • 使用命令查看端口使用状况:netstat -nat|grep -i 8080|wc -l 命令可以帮助我们查看特定端口(如8080)的使用情况。这个命令会列出所有与8080端口相关的网络连接状态,并通过wc -l计算连接数。
    • 如果发现连接数在6万左右,那么很可能是端口号已经用尽。这种情况下,需要采取措施减少并发连接数或者增加服务器的处理能力,以防止端口耗尽导致的服务不可用。

网络排查

  1. 网络与资源监控优化是一个持续的过程,需要对系统的各个方面进行细致的观察和调整。在本例中,我们对业务服务器状态进行了深入调查,发现了一些关键的问题和解决方案。

  2. 问题诊断

    • 初步调查发现,网络流量的激增与数据库查询活动有关。特别是,健康检查接口的设计导致了频繁的数据库加载,这个接口为了监测是否有遗漏的订单,不断地加载所有活跃订单。这种设计在高并发的环境下会导致大量的数据库查询操作,从而引起网络流量的显著增加。
    • 由于健康检查接口的操作,CPU和内存的使用率急剧上升,给服务器带来了巨大的压力。这种资源的过度使用不仅影响了服务的稳定性,还可能导致性能下降和其他服务的故障。
  3. 解决措施

    • 关闭健康检查接口中的监控功能:通过关闭或者优化这部分功能,减少了不必要的数据库查询,从而降低了网络流量和系统负载。
    • 尽管采取了上述措施,测试的稳定性有所改善,但是系统中仍然存在超时现象。这表明可能需要进一步的优化措施,比如优化数据库索引、调整查询算法或者增加更多的服务器资源。
  4. 性能监控工具的应用

    • 网络分析:使用iftop -i eth1 -P命令可以实时监控指定网络接口(如eth1)的流量情况,帮助快速识别流量异常的根源。
    • CPU分析:使用top命令可以实时显示系统中各个进程的CPU使用情况,帮助我们找出消耗CPU资源最多的进程。
    • JVM内存分析:使用jstat -gc [pid] 时间间隔单位毫秒 次数,例如jstat -gc 189 1000 10,可以监控指定Java进程(如pid=189)的垃圾收集情况,帮助我们了解内存的使用和垃圾收集的频率。

GC排查

内存管理与GC(垃圾收集)优化是确保Java应用性能和稳定性的关键因素。在本例中,我们使用了Arthas工具来追踪和诊断性能问题,并采取了有效的优化措施。

  1. 问题诊断

    • 使用Arthas工具追踪发现,发送订单到Cep服务的过程耗时较长。Arthas是一个Java诊断工具,能够帮助开发者即时查看和诊断运行中的Java程序,无需重启或修改代码。
    • 问题的原因在于Cep服务虽然配置了5GB内存,但实际可用内存仅为2GB。这种差异可能是由于JVM内存分配不当或者系统其他部分占用了过多内存导致的。
    • 由于可用内存较低,导致在处理大量订单时频繁触发Full GC(全面垃圾收集)。Full GC会暂停所有应用线程,直至垃圾收集完成,这会严重影响应用的响应时间和吞吐量。
  2. 解决措施

    • 我们通过限制存活订单数不超过20万来避免内存溢出。这个限制减少了同时在内存中处理的订单数量,从而降低了内存的使用量。
    • 清理部分订单后,测试恢复正常。这意味着通过释放不再需要的对象所占用的内存,我们能够减少GC的频率和持续时间,提高应用的性能。
  3. 内存管理和GC优化的一般原则

    • 合理配置JVM内存:根据应用的需求和服务器的资源情况,合理设置堆内存(-Xmx)和非堆内存(-XX:MaxMetaspaceSize等)的大小,避免内存不足或过度分配。
    • 代码优化:优化代码以减少不必要的对象创建和长时间持有大对象,可以使用对象池或软引用等技术来管理对象生命周期。
    • GC策略调整:选择合适的垃圾收集器(如CMS、G1等),并根据应用的特点调整GC参数,比如增大年轻代比例、调整晋升阈值等。
    • 性能监控:使用各种性能监控工具(如Arthas、JVisualVM、PerfMa等)实时监控系统的内存和GC状态,及时发现并解决问题。

连接管理策略

连接管理策略是确保应用能够在高并发环境下稳定运行的关键因素之一。在本例中,我们通过分析JMeter的默认行为和调整配置,解决了连接管理的问题。

  1. 问题诊断

    • 使用JMeter进行性能测试时,我们发现默认情况下JMeter使用的是短连接模式。这意味着每次请求完成后,TCP连接会被立即关闭,而不是被重新用于后续的请求。
    • 由于未启用KeepAlive选项,端口在释放后不会被立即回收。在TCP协议中,KeepAlive是一种检测和控制空闲连接的机制,它能够确保连接在关闭后快速释放占用的资源。
    • 这种端口未立即回收的情况影响了后续连接的建立,因为在TCP/IP网络中,一个端口在一段时间内只能被一个连接使用。如果端口未能及时释放,新的连接请求就会被阻塞,导致性能下降或超时错误。
  2. 解决措施

    • 我们通过修改JMeter的配置,开启了KeepAlive选项。这个选项使得TCP连接在关闭后能够更快地被系统回收,从而减少了端口资源的消耗。
    • 开启KeepAlive后,端口的使用效率得到了显著提升,后续连接建立的延迟和失败率都大幅降低。这不仅提高了性能测试的效率,也使得测试结果更加准确和可靠。
  3. 连接管理策略的一般原则

    • 长连接与短连接的选择:根据应用的实际需求选择适合的连接模式。长连接可以减少连接建立和关闭的开销,但需要更复杂的连接管理机制来处理异常和空闲状态。
    • KeepAlive的配置:在可能的情况下启用KeepAlive,以便及时检测和释放不再需要的连接。但需要注意,KeepAlive不适合所有场景,比如移动网络环境下可能会增加电池消耗。
    • 资源调优与监控:合理配置线程池、数据库连接池等资源池的大小,监控资源使用情况,及时调整参数以适应不同的负载情况。
    • 适应性与容错性:设计适应性强和容错性高的系统,能够处理网络波动、服务不可用等异常情况,保证系统的稳定运行。

总结与启示:

  • 性能优化是个系统工程,需综合考虑网络、硬件资源、软件配置及测试工具设置。
  • 细致监控与诊断是关键,借助专业工具(如arthas、iftop)定位瓶颈。
  • 资源管理至关重要,合理分配内存和线程数,避免资源过度消耗。
  • 连接策略调整,如启用KeepAlive,能有效提升连接效率和测试稳定性。

通过这一系列排查与优化措施,我们不仅解决了JMeter测试中的超时问题,还提升了系统的整体性能和稳定性,为网格交易功能的高效运行打下了坚实的基础。分享此经验,希望能为遇到类似问题的开发者提供参考与帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剧本杀小程序开发,探索市场发展新的商业机遇

剧本杀游戏作为一个新兴行业,经历了爆发式的增长,剧本杀游戏在市场中的热度不断升高。 不过,在市场的火热下,竞争也在逐渐加大。因此,在市场竞争下,成本低、主题多样、有趣的线上剧本杀小程序成为了创业者…

竹云董事长在第二届ICT技术发展与企业数字化转型高峰论坛作主题演讲

5月25日,由中国服务贸易协会指导,中国服务贸易协会信息技术服务委员会主办的 “第二届ICT技术发展与企业数字化转型高峰论坛” 在北京隆重召开。 本次论坛以 “数据驱动,AI引领,打造新质生产力” 为主题,特邀业内200余…

WebGL实现医学教学软件

使用WebGL实现医学教学软件是一个复杂但非常有益的项目,可以显著提升医学教育的互动性和效果。以下是详细的实现步骤,包括需求分析、技术选型、开发流程和注意事项。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作…

redis-cli help使用

1. redis-cli命令使用—先连接上服务器 连接到 Redis 服务器: 使用 redis-cli 命令即可连接到本地运行的 Redis 服务器,默认连接到本地的 6379 端口。 redis-cli如果 Redis 服务器不在本地或者端口不同,可以使用 -h 和 -p 参数指定主机和端…

探索Django 5: 从零开始,打造你的第一个Web应用

今天我们将一起探索 Django 5,一个备受开发者喜爱的 Python Web 框架。我们会了解 Django 5 的简介,新特性,如何安装 Django,以及用 Django 编写一个简单的 “Hello, World” 网站。最后,我会推荐一本与 Django 5 相关…

苏洵,大器晚成的家风塑造者

💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 苏洵,字明允,号老泉,生于宋真宗大中祥符二年(公元1009年),卒于宋英宗治平…

PPT忘记保存?教你如何轻松恢复

在日常办公中PPT文件作为主流文档格式,承载着我们大量的工作成果。然而当不小心误点了“不保存”按钮,或是遭遇软件崩溃等意外情况导致文档丢失时,文件内容是否还能够能恢复,往往成为我们最关心的问题。本文将为您提供五大免费且实…

《探索网络七层模型:构建高效通信架构的关键》

在当今数字化时代,网络通信已经成为人们生活和工作中不可或缺的一部分。而网络七层模型作为计算机网络体系结构的重要基础,其技术架构对于构建高效、稳定的通信系统具有重要意义。本文将深入探讨网络七层模型的技术架构设计,以及其在构建现代…

轻松掌握图片批量处理,赶紧学习这些小技巧!

在现今数字化的社会中,我们每天都会接触到大量的图片,无论是在工作中还是日常生活中。要想高效处理这些图片,掌握图片批量处理的技巧就显得尤为重要。幸运的是,有许多小技巧和工具可以让这一过程变得轻松愉快。 在本文中&#xf…

信息学一周赛事安排

本周比赛提醒 本周有以下几场比赛即将开始: 1.ABC-356 比赛时间:6月1日(周六)晚20:00 比赛链接:https://atcoder.jp/contests/abc356 2.ARC-179 比赛时间:6月2日(周日)晚20:00 …

excel导到access后长文本内容缺失

参考该文Excel表格如何导入Access数据库以及列内容超过255个字符被截断解决办法 - 知乎 原因是access数据中列内容超过255个字符会被截断。 解决方法:将该字段的数据类型修改为长文本即可。

微调真的能让LLM学到新东西吗:引入新知识可能让模型产生更多的幻觉

大型语言模型(llm)是在巨大的文本语料库上训练的,在那里他们获得了大量的事实知识。这些知识嵌入到它们的参数中,然后可以在需要时使用。这些模型的知识在培训结束时被“具体化”。在预训练结束时,模型实际上停止学习。 对模型进行对齐或进行…

【VTKExamples::Utilities】第十四期 Screenshot

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例Screenshot,保存窗口快照,并解析接口vtkWindowToImageFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是…

SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)

一、问题描述: 当/etc/selinux/conf被要求必须是SELINUXenforcing,不被允许使用setenforce 0宽松模式 我们启动httpd就会报错: Job for httpd.service failed because the control process exited with error code. See "systemctl s…

Let‘s Encrypt 免费证书申请

填写邮箱,申请的域名 单域名:www.example.com 泛域名: *.example.com yum -y install certbot sudo certbot certonly --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns --email xxexample…

从零开始学React--环境搭建

React官网 快速入门 – React 中文文档 1.搭建环境 下载nodejs,双击安装 nodejs下载地址 更新npm npm install -g npm 设置npm源,加快下载速度 npm config set registry https://registry.npmmirror.com 创建一个react应用 npx create-react-app react-ba…

Nginx的配置与调试

目录 1、安装Nginx 2、Nginx的配置文件结构 2.1 Nginx的全局配置 2.2 HTTP服务器配置 2.3 HttpGzip模块配置 2.4 负载均衡配置 2.5 server虚拟主机配置 2.6 location URL匹配配置 2.7 StubStatus模块配置 1、安装Nginx 在安装Nginx之前,需确保系统已经安装…

豆瓣内容抓取:使用R、httr和XML库的完整教程

概述 在数据分析和统计领域,R语言以其强大的数据处理能力和丰富的包库资源而闻名。它不仅提供了一个灵活的编程环境,还拥有专门用于数据抓取和处理的工具,如httr和XML库。这些工具使得从各种网站上抓取数据变得简单而高效。 豆瓣网站作为一个…

Android环境下Mesa初始化流程重学习之eglCreateContext

Mesa初始化流程重学习之eglCreateContext 引言 没有啥好说的了,直接上手撸代码!总得找点事情干不是!我打工我快乐!我奋斗,我快乐! 一. 核心结构体之间的关联 二. eglCreateContext流程分析 eglCreateContext(...)//s…

红酒配餐中的酒杯选择与使用技巧

在红酒配餐中,酒杯的选择与使用技巧是影响品鉴体验的重要因素。合适的酒杯不仅能展现出红酒的优雅和风味,还能提升用餐的仪式感和愉悦感。云仓酒庄雷盛红酒以其卓着的品质和丰富的口感,成为了红酒爱好者们的首要选择品牌。下面将介绍在红酒配…