专栏文章 五分钟 TPS 调优

飞天小子的性能课堂 · 2020年11月29日 · 最后由 飞天小子的性能课堂 回复于 2020年12月08日 · 6465 次阅读

点击这里>>观看性能测试基础理论公开课,B 站分享

概述

本地起了一个项目,对 login 登录做了 200 并发的负载测试。发现 tps 最高上升到 550 左右,然后持续的剧烈波动


本着怀疑一切的态度,觉得 tps 应该有上升的空间,于是去监听一下进程。

分析过程

习惯性的做线程 dump

结果发现一大堆线程阻塞了(BLOCKED)。为什么会阻塞?日志已经很明显提示了,线程疯狂打日志导致的堵塞。
线程为什么会疯狂打日志?这里也提示了,在调用checkLogin方法的时候抛出来的日志。

代码检索
代码拉出来,搜一下checkLogin方法。于是就发现登录这里每一步都打了一条日志。批量处理的时候,很容易就把线程给阻塞了。

现在把这些日志全部禁用掉

重启项目,脚本回归
现在 TPS 上升到了 800 左右

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

好奇为啥打日志会引起阻塞?因为 IO 输出已经满了?

这个是拿什么监听的

陈恒捷 回复

打日志严重影响性能的

yonghang.zhang 回复

这个是现象,我好奇的是本质,为啥打日志会引起线程阻塞。
毕竟对于定位问题,日志是一个很重要的依据,不严重影响性能前提下肯定希望日志越多越好。搞清楚本质才知道应该避免哪些地方打日志导致严重影响性能,预防问题的发生。而且也不是每个需求都有足够的资源和时间去做性能测试的。

陈恒捷 回复

打日志要和硬件交互啊,会产生硬件中断,会导致 CPU 强行等待中断,不能干其他活。

请问在 jmeter 里面打印日志,会影响压测性能吗?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册