性能测试记录: ZZ 只改5行代码获得10倍吞吐量提升
首先得找台足够性能的机器来测试,性能不足时代码运行会出现各种奇怪的现象,导致浪费时间
文章: https://www.jianshu.com/p/4cd8596352ad 只改了5行代码吞吐量提升10倍多
SQL 改为异步执行 提升2倍
中间一通折腾,效果不佳
观察到CPU使用率仍然较高,在砍掉大量线程后, 代码慢?转向 CPU高?
打印堆栈(JAVA)发现大量的 getBean->createBean的情况, 找到最终点: 调用redis时会重复创建新的 jedis实例, 每秒会进行10次createBean
改为New
排查涉及的命令如下:
查询服务进程CPU情况: top –Hp pid
查询JVM GC相关参数:jstat -gc pid 2000 (对 pid [进程号] 每隔 2s 输出一次日志)
打印当前堆栈信息: jstack -l pid >> stack.log
结果是好的,过程是曲折的。总的来说还是知识的欠缺,文章看起来还算顺畅,但都是事后诸葛亮,不对,应该是时候臭皮匠。基本都是边查资料边分析边操作,前后花费了4天时间,尝试了很多。 Mysql : Buffer Pool 、Change Buffer 、Redo Log 大小、双一配置... 代码 : 异步执行,线程池参数调整,tomcat 配置,Druid连接池配置... JVM : 内存大小,分配,垃圾收集器都想换... 总归一通瞎搞,能想到的都试试。 后续还需要多了解一些性能优化知识,至少要做到排查思路清晰,不瞎搞。 最后5行代码有哪些: new Redis实例:1 耗时统计:3 SQL异步执行 @Async: 1(上图最终的结果是包含该部分的,时间原因未对SQL进行处理,后续会考虑Redis原子操作+定时同步数据库方式来进行,避免同时操数据库)