高楼的性能工程实战课
高楼
盾山科技 CEO,7DGroup 创始人
19172 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 35 讲
特别放送 (1讲)
结课测试 (1讲)
结束语 (1讲)
高楼的性能工程实战课
15
15
1.0x
00:00/00:00
登录|注册

19 | 生成订单信息之一:应用JDBC池优化和内存溢出分析

你好,我是高楼。
在这节课中,我们来看一下生成订单接口的基准场景是什么结果。
你将看到一些重复的问题,比如 SQL 的问题定位,虽然具体的问题不同,但我们的分析逻辑没有区别,我会简单带过。同时,你也会看到一些新的问题,比如 JDBC 池增加之后,由于数据量过大导致 JVM 内存被消耗光;批量业务和实时业务共存导致的锁问题等。这节课,我们重点来看看这样的问题如何进一步优化。
话不多说,开整!

场景运行数据

对于生成订单接口,我们第一次试执行性能场景的结果如下:
从场景执行的结果来看。40 个压力线程只跑出来 50 多的 TPS,响应时间也蹭蹭蹭地跑了近 700ms。这显然是一个非常慢的接口了。
从这样的接口来看,我们选择这个项目算是选择对了,因为到处都是性能问题。
下面我们就来一步步分析一下。

架构图

前面我们做过多次描述,画架构图是为了知道分析的路径。所以按照惯例,我们仍然把架构图列在这里。
由于这个接口比较复杂,架构图看起来有点乱,我又整了一个简化版本:
Order 服务是这个接口的核心,因此,你可以看到我把 Order 相关的服务都筛选了出来,这样我们就能很清楚地知道它连接了哪些东西。
下面我们来拆分响应时间。

拆分响应时间

因为在场景运行的时候,我们看到响应时间比较长,所以我们用 APM 工具来拆分一下:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文通过实例分析了JDBC池优化和内存溢出问题的解决方法。首先描述了生成订单接口的性能问题,包括响应时间长、TPS低等情况,并介绍了对接口进行拆分响应时间和全局监控分析的过程,发现了Order服务中的数据库连接池问题。作者提出了通过增加JDBC池的连接数来解决这一问题,并给出了相应的配置修改建议。在修改JDBC池后,文章还描述了压力场景的执行数据变化情况,指出了TPS的上升趋势和响应时间的不稳定性。最后,文章提出了需要进一步优化的问题,并展望了下一阶段的分析方向。 通过分析JDBC池优化和内存溢出问题的解决方法,本文为读者提供了宝贵的技术经验。文章提供了详细的分析过程和解决方案,对于需要解决类似问题的技术人员具有一定的参考价值。文章内容涉及了JDBC池优化、内存溢出分析和SQL优化等技术问题,为读者呈现了一场技术挑战与解决的过程。文章通过实例分析,突出了JDBC池优化和内存溢出问题的解决方法,为读者提供了宝贵的技术经验。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高楼的性能工程实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • 张东炫
    1.VM Thread 线程消耗 CPU 高的异常,查看JAVA gc 是否合理 2.innodb_trx表提供了当前innodb引擎内每个事务的信息(只读事务除外),包括当一个事务启动,事务是否在等待一个锁,以及交易正在执行的语句

    作者回复: 理解合理。

    2021-05-06
    4
  • jy
    老师你好,查了下资料,bulk_insert_buffer_size是用于myisam存储引擎,我看你的建表sql,是innodb,请确认下呢?

    作者回复: bulk_insert_buffer_size是作用于myisam存储引擎的。在insert的时候,会用到临时表,而临时表是在myisam引擎中的,所以这个参数会对insert起到优化作用。

    2021-07-28
    2
  • 阿嬷
    老师,架构图是用什么画的?

    作者回复: 这个文章中的架构图是skywalking自动生成的,不用画。

    2022-02-14
  • steve
    aix服务器的java路径下没找到jstack

    作者回复: 你看你用的jdk中有什么能打印栈的工具。只要能打印栈就行,不一定要是jstack。

    2021-09-06
  • jy
    1、第二阶段里面 在查看 Order 服务的 top 时,占用cpu最多的是pid 29349 ,为什么后面是jstack -l 1,而不是jstack -l 29349? 2、“当批量业务和实时业务同时出现在同一个数据库中,并且是对同样的表进行操作,这时,你就得考虑一下架构设计是否合理了。” 请问下应该如何设计架构呢? 谢谢

    作者回复: 1. 是要进入到容器中去看,容器中的进程id是1,这里应该描述的更精准一点。我改改去。 2. 分库分表、读写分离,从库做批量。

    2021-07-16
  • zwm
    从上图来看,系统资源并没有完全用起来,这个接口显然还有优化的空间 老师这个是怎么看出来的,就通过TPS和响应时间?

    作者回复: 这里也看了系统资源,不过我没有截图。

    2021-07-13
  • Hant
    高老师,怎么判断GC正不正常呀?

    作者回复: 看gc对tps产生了多大的影响。

    2021-06-27
收起评论
大纲
固定大纲
场景运行数据
架构图
拆分响应时间
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部