Apple Watch|Spring Boot Serverless 实战系列 | 性能调优( 二 )


【Apple Watch|Spring Boot Serverless 实战系列 | 性能调优】可在 s.yaml 中为相关应用配置以下环境变量
SPRING_MAIN_LAZY_INITIATIALIZATION=true
关闭优化编译器
默认情况下 , JVM 有多个阶段的 JIT 编译 。 虽然这些阶段可以逐渐提高应用的效率 , 但它们也会增加内存使用的开销 , 并增加启动时间 。 对于短期运行的 Serverless 应用 , 请考虑关闭此优化 , 以牺牲长期效率换取更短的启动时间 。
可在 s.yaml 中为相关应用配置以下环境变量:
JAVA_TOOL_OPTIONS=\"-XX:+TieredCompilation -XX:TieredStopAtLevel=1\"
s.yaml 中设置环境变量示例:
如下图所示 , 对 mall-admin 函数配置环境变量 。 然后执行 sudo -E s mall-admin deploy 部署 。

登录实例检查环境变量是否配置正确
在控制台函数详情页的请求列表中找到对应的请求 , 点击更多中的“实例详情链接” 。

在实例详情页中点击“登录实例” 。

在 shell 界面中执行 echo 命令 , 查看对应的环境变量是否设置正确 。
注意:对于非预留实例 , 一段时间没有请求后 , 函数计算系统会自动回收实例 。 此时无法再登入实例(上面的实例详情页面中的登录实例按钮会变灰) 。 所以请执行调用后 , 在实例被回收之前尽快登录 。

配置合理的实例参数 当我们选择了应用实例规格 , 比如 2C4G 或者 4C8G , 接下来我们希望知道一个实例处理多少请求可以既能充分利用资源又能够保证性能 。 当处理的请求超过一个限制后 , 系统能够快速弹出实例 , 保证应用性能平滑 。 如何度量实例过载有多个维度 , 例如 qps 超过一定阈值 , 或者实例 CPU/Memory/Network/Load 等指标超过阈值等等 。 函数计算使用实例并发度(Instance Concurrency)来作为实例负载的度量和实例伸缩的依据 。 实例并发度(Instance Concurrency)是指一个实例能同时执行的请求数 。 例如将实例并发度设置为 20 , 则意味着一个实例在任意时刻最大能同时执行 20 个请求 。
注意:请区分实例并发度和 QPS 的区别 。
使用实例并发度来度量负载有如下优势:
系统能够迅速统计实例并发度指标值进行扩缩容 。 CPU/Memory/Network/Load 等实例级别的指标通常是后台统计 , 需要花费数十秒的指标统计后才能进行伸缩 , 难以满足在线应用的弹性伸缩要求 。在各种条件下 , 实例并发度指标都能够稳定的反映系统负载高低 。 如果以请求延时作为指标 , 系统难以区分是实例过载导致延时变大 , 还是下游服务成为瓶颈导致延时变大 。 例如一个典型的 Web 应用 , 通常会访问 MySQL 数据库 。 如果数据库成为瓶颈 , 请求延时变大 , 此时扩容不但毫无意义 , 而且会压垮数据库 , 让情况更加恶化 。 QPS 和请求延时相关 , 也会有上述问题 。实例并发度作为伸缩依据虽然有上述优点 , 但用户常常并不知道该设置多大的实例并发度 。 我推荐按照下述流程确定合理的并发度:


将应用函数的最大实例数设置为1 , 确保压测到单个实例的性能 。使用负载压测工具对应用进行压测 , 查看 tps 和请求延时等指标 逐步调大实例并发度 , 如果性能仍然良好 , 则继续调大;如果性能不符合预期 , 则调小并发度 。原文链接:https://developer.aliyun.com/article/859628?utm_content=g_1000320223 本文为阿里云原创内容 , 未经允许不得转载 。