活着 —— 2020年中国软件测试行业问卷调研,点击详情进入有奖问卷

专栏文章 五分钟 TPS 调优

飞天小子的性能课堂 · November 29, 2020 · Last by 飞天小子的性能课堂 replied at December 08, 2020 · 612 hits

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

概述

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


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

分析过程

习惯性的做线程dump

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

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

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

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

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

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

这个是拿什么监听的

陈恒捷 回复

打日志严重影响性能的

yonghang.zhang 回复

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

陈恒捷 回复

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

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up