前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能分析之用户登录 TPS 低及 CPU 被打满问题分析

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

作者头像
高楼Zee
发布2022-01-25 19:18:51
1.1K0
发布2022-01-25 19:18:51
举报
文章被收录于专栏:7DGroup7DGroup
用户登录说起来只是一个很普通的功能,不过它的逻辑一点也不简单。因为登录过程要对个人的信息进行对比验证,验证过程中又要调用相应的加密算法,而加密算法是对性能要求很高的一种功能。复杂的加密算法安全性高,但性能就差;不复杂的加密算法性能好,但安全性高,这是一个取舍的问题。

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

  • 问题现象

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

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

  • 分析过程

链路路径主要为:JMeter-Nginx-APP SVC-Redis-MySQL

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

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

  • 全局监控

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

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

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

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

  • 服务定向分析

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

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

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

这里为程序的业务代码。

于是 trace attemptAuthentication 这个方法。

接着trace authenticate 这个方法。

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

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

image.png

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

  • Demo验证

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

JMeter 并发20 MD5 加密结果:

JMeter 并发20 BCrypt 加密结果:

  • 建议优化方向

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 7DGroup 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档