写点什么

性能分析之用户登录 TPS 低以及 CPU 被打满问题分析

作者:zuozewei
  • 2022 年 2 月 15 日
  • 本文字数:827 字

    阅读完需:约 3 分钟

性能分析之用户登录TPS低以及CPU被打满问题分析

用户登录说起来只是一个很普通的功能,不过它的逻辑一点也不简单。因为登录过程要对个人的信息进行对比验证,验证过程中又要调用相应的加密算法,而加密算法是对性能要求很高的一种功能。复杂的加密算法安全性高,但性能就差;不复杂的加密算法性能好,但安全性高,这是一个取舍的问题。


按照测试方案的基准场景的设计步骤,先压测这个接口的基准场景。


● 问题现象



如上图所示,这现象老明显了。


压测结果中的 TPS 平均才 25 平均响应时间达到了 993 ms。


● 分析过程


从性能分析逻辑上来说,针对响应时间长的问题,首先要做的就是拆分时间。由于这个系统已经部署了 SkyWalking,用它看看时间主要消耗在了哪里。



看图中,Tomcat 的 SelfDuration 是最多的,也就是说时间几乎消耗在服务本身。


● 全局监控


首先查看下应用服务器的资源水位情况:



可以看到 4C 的 CPU 资源已经被耗光。


这里部署的是容器,先看下各容器资源使用情况:



可以看到资源主要被服务容器消耗了。


● 服务定向分析


首先进入服务容器查看下资源消耗情况:



在 SkyWaking 中又看不到完整的调用栈,考虑直接连到服务 Java 进程中看方法的时间消耗。这里用 Arthas 来跟踪一下。


查看当前最忙的前 N 个线程并打印堆栈:



这里为程序的业务代码。


于是 trace attemptAuthentication 这个方法。



接着 trace authenticate 这个方法。



一层层跟踪下去,最终来到了这里:



既然这个 crypt_raw 方法耗时比较长,那就反编译源代码看看这一段是什么东西。



可以看到这里是一个加密算法 BCrypt,那么结论就很明显了 BCrypt 加密算法虽然安全性高,但性能差。


● demo 验证


这里使用 SpringBoot 实现 MD5 加密和 BCrypt 加密的实例。



JMeter 并发 20 MD5 加密结果:



JMeter 并发 20 BCrypt 加密结果:



● 建议优化方向


这里解释一下,Bcrypt 在加密时,每一次 HASH 出来的值是不同的,所以特别慢!


具体什么是 Bcrypt 算法,可以参考这篇文章:https://www.jianshu.com/p/2b131bfc2f10


分析到这里,优化方案其实比较明确了,那就是用更快的加密方式,或者去掉这个加密算法。

发布于: 刚刚阅读数: 3
用户头像

zuozewei

关注

测试及性能 | 公众号@7DGroup 2017.12.23 加入

CSDN博客专家、测试领域优质创作者,华为云云享专家、2021年度华为云社区十佳博主,掘金2021年度人气作者No.12,极客时间《全链路压测实战30讲》专栏作者之一,《性能测试实战30讲》《高楼的性能工程实战课》编委。

评论

发布
暂无评论
性能分析之用户登录TPS低以及CPU被打满问题分析