当前位置: 首页 > news >正文

性能问题定位记录-1

背景

性能压测时,部分docker cpu达到100%了,测试要求解决。

定位思路

cpu使用率有差异,本人认知内有2种情况:
1、负载不均衡
2、机器性能本身有差异

机器性能差异排查

可以通过GC日志,快速判断。如果回收相同的内存,使用的时间差异不大,那基本硬件规格是没问题的。详细可以参考之前的文章https://blog.csdn.net/shuxiaohua/article/details/147285269。

[2026-03-07T07:25:08.816+0000][info][gc]GC(925)PauseYoung(Normal)(G1 Evacuation Pause)761M->266M(3072M)6.012ms[2026-03-07T07:25:08.816+0000][info][gc,cpu]GC(925)User=0.02s Sys=0.00s Real=0.01s[2026-03-07T07:25:09.811+0000][info][gc,start]GC(926)PauseYoung(Normal)(G1 Evacuation Pause)[2026-03-07T07:25:09.812+0000][info][gc,task]GC(926)Using4workers of4forevacuation[2026-03-07T07:25:09.816+0000][info][gc,phases]GC(926)Pre Evacuate Collection Set:0.35ms[2026-03-07T07:25:09.816+0000][info][gc,phases]GC(926)Merge Heap Roots:0.13ms[2026-03-07T07:25:09.816+0000][info][gc,phases]GC(926)Evacuate Collection Set:3.04ms[2026-03-07T07:25:09.816+0000][info][gc,phases]GC(926)Post Evacuate Collection Set:1.11ms[2026-03-07T07:25:09.816+0000][info][gc,phases]GC(926)Other:0.09ms[2026-03-07T07:25:09.816+0000][info][gc,heap]GC(926)Eden regions:124->0(124)[2026-03-07T07:25:09.816+0000][info][gc,heap]GC(926)Survivor regions:1->1(16)[2026-03-07T07:25:09.816+0000][info][gc,heap]GC(926)Old regions:62->62[2026-03-07T07:25:09.816+0000][info][gc,heap]GC(926)Humongous regions:4->4[2026-03-07T07:25:09.816+0000][info][gc,metaspace]GC(926)Metaspace:226560K(229184K)->226560K(229184K)NonClass:200613K(201728K)->200613K(201728K)Class:25947K(27456K)->25947K(27456K)
[2026-03-07T07:24:58.229+0000][info][gc]GC(354)PauseYoung(Normal)(G1 Evacuation Pause)762M->266M(3072M)6.089ms[2026-03-07T07:24:58.229+0000][info][gc,cpu]GC(354)User=0.02s Sys=0.00s Real=0.01s[2026-03-07T07:25:00.964+0000][info][gc,start]GC(355)PauseYoung(Normal)(G1 Evacuation Pause)[2026-03-07T07:25:00.964+0000][info][gc,task]GC(355)Using4workers of4forevacuation[2026-03-07T07:25:00.970+0000][info][gc,phases]GC(355)Pre Evacuate Collection Set:0.34ms[2026-03-07T07:25:00.970+0000][info][gc,phases]GC(355)Merge Heap Roots:0.14ms[2026-03-07T07:25:00.970+0000][info][gc,phases]GC(355)Evacuate Collection Set:4.39ms[2026-03-07T07:25:00.970+0000][info][gc,phases]GC(355)Post Evacuate Collection Set:1.16ms[2026-03-07T07:25:00.970+0000][info][gc,phases]GC(355)Other:0.09ms[2026-03-07T07:25:00.970+0000][info][gc,heap]GC(355)Eden regions:124->0(124)[2026-03-07T07:25:00.970+0000][info][gc,heap]GC(355)Survivor regions:1->1(16)[2026-03-07T07:25:00.970+0000][info][gc,heap]GC(355)Old regions:61->61[2026-03-07T07:25:00.970+0000][info][gc,heap]GC(355)Humongous regions:6->6[2026-03-07T07:25:00.970+0000][info][gc,metaspace]GC(355)Metaspace:226151K(228736K)->226151K(228736K)NonClass:200227K(201344K)->200227K(201344K)Class:25924K(27392K)->25924K(27392K)

通过对比两台机器的GC日志,发现gc性能基本一致,因此排除该问题。

负载均衡排查

一般负载均衡都是用的轮训机制,所以就算有机器CPU高,也不可能一直高。
从监控来看,个人猜测是后台定时任务处理负载不均衡。比如有处理MQS消息,但是因为分片设置的比较少,只有部分服务承担消费任务。
通过top -H -p 进程号 发现top线程是都tomcat的http-nio-xx。因此可以排除上述猜测。(这里忘记截图了,所以没放图)

通过监控发现cpu高的输入流量也高,同时top命令也显示CPU高,单个线程的cpu使用率也高,同时正在执行请求的tomcat线程也多几个。从以上信息来看,应该负载均衡策略有问题。

查看ALB是否有启用Sticky Sessions(同一个会话的请求都打到一台机器上。),发现确实如此,关闭开开关后,cpu回到正常。

圈红的时间点是关闭了开关后的效果。

后记

此问题是帮隔壁项目组定位的,定位该问题并未花很长时间。上述过程有点轻描淡写,实际上是需要很多经验做支撑的。
我一开始并未怀疑是负载均衡问题,而是直接排查机器规格是否有差异。
一是因为,之前生产出过该问题。另外该系统生产环境使用的是spring cloud gateway做得负载均衡。spring cloud gateway默认的负载均衡策略是轮训,按说不应该某台机器cpu一直高。
因此排除机器差异后,就着手确认负载均衡问题。首先通过监控中的输入流量,确信确实负载不均衡。然后找了2台差异较大的docker,进去通过top命令发现,cpu高的docker单线程cpu(30%+)一直比低(11%)的高。
该现象,很像是计算量高的请求一直路由到同一台机器。
因此我使用jstack打印的线程,通过线程栈,确认瞬时处理的接口,证实上述猜测。
下图中圈红的是计算量明显大的接口,该机器cpu也是明显比另外一台高。

以上现象以我个人经验判断是,性能环境没有使用spring cloud gateway作为负载均衡,而是使用了集团的ALB做负载均衡,而且还开启了Sticky Sessions(以前集团让所有产品排查过该用户,要求大家关闭该开关,因为会导致负载不均衡)。不仅如此,猜测压测脚本同一个接口使用的是同一个账号进行压测的。
以上猜测都一一被证实。

http://www.jsqmd.com/news/449569/

相关文章:

  • 编程计算消毒液配比,按场景(家居/餐具/皮肤)生成安全浓度,避免刺激与失效。
  • Windows 配置 chatExcel-MCP完整踩坑指南
  • Qwen3-0.6B-FP8在Keil5开发环境中的辅助插件构想与实现思路
  • 3.7打卡
  • 多线程基础(2)
  • Leetcode使用最小花费爬楼梯的解法思考与回溯
  • 不踩雷!千笔ai写作,普遍认可的AI论文工具
  • 土豆矮砧密植:水肥一体化系统铺设全指南
  • DeepInnovator专攻一件事:让LLM自己想出科研新点子
  • 信息奥赛一本通—编程启蒙(3366:【例63.2】 回形方阵)
  • Uniapp微信小程序:自定义海报生成方案。支持保存到本地,二维码生成,富文本解析(个人学习记录)
  • Legal RAG Bench:当检索拖了后腿,大模型再聪明也白搭
  • Qwen-Image-2512-SDNQ Web服务部署教程:防火墙端口开放与公网访问安全配置
  • 虚拟机常见问题
  • Janus-Pro-7B企业实操:客服中心图片工单理解+标准化回复生成
  • 9K 条数据训 4B 模型,逼近 DeepSeek-R1?CHIMERA 用合成数据破解推理冷启动难题
  • 学长亲荐!千笔AI,研究生论文写作神器
  • 安晋捷运(深圳)国际物流有限公司安井株式会社日本专线物流服务
  • prometheus告警-以CPU使用率告警为例
  • 查重35%、AI概率80%?别删内容!百考通用语义重构双降达标
  • 独立开发者出海收款指南:用 Wise 打通 App Store 海外收入
  • 【LLM】Labor market impacts of AI
  • 小爱AIAPI连接方法python
  • Windows 11 安装AIRI踩坑指北
  • Spring_couplet_generation 结合MySQL存储用户生成记录:安装配置与集成实战
  • 研发电脑防止拍照 公司防拍照泄密的Top5实用防护方案
  • 深度拆解:零门店无代理的半年6000万营收策略
  • 科技越发达,内心的平静反而越珍贵
  • OpenClaw:通过飞书发送文件的完整教程
  • ## RV1126B MIPI 接口适配 SC233HGS 控制列表调试