部署在Daily Razor tomcat托管方案的Spring Boot应用首页加载缓慢
Spring Boot部署到Daily Razor后首页加载缓慢的常见原因及解决方案
- JVM冷启动问题
Daily Razor这类共享Java托管平台会对长期无请求的应用做休眠资源回收,首次访问时需要重新启动JVM、初始化Spring上下文、加载全量Bean,会产生数秒到数十秒的耗时。本地运行时应用处于长期激活状态,不存在冷启动开销。可以配置定时心跳任务,每隔3-5分钟主动请求一次应用的轻量接口,避免应用被平台休眠。 - 托管环境资源配额不足
共享托管方案通常会对单应用的CPU、内存、JVM堆大小做严格限制,本地开发环境资源充足所以运行流畅,到了受限环境下Bean初始化、请求处理、GC回收的速度都会大幅下降。可以根据平台给的资源配额调整JVM启动参数,例如-Xmx512m -Xms256m,将堆大小固定在合理区间,避免动态调整堆内存带来的额外开销。 - 外部依赖网络延迟过高
本地运行时数据库、缓存、第三方接口等依赖通常处于本地或者同内网环境,访问延迟极低。部署到Daily Razor后如果上述依赖部署在其他区域,首页加载时的跨区域网络请求会大幅拉长耗时。优先选择和托管平台同区域的外部依赖服务,同时给首页需要的不变数据添加本地缓存,减少跨网络请求次数。 - 静态资源配置未优化
本地开发模式下Spring Boot默认开启了静态资源的本地缓存,读取速度极快。线上环境如果未开启静态资源压缩、缓存头配置,所有静态资源每次都需要从应用服务完整加载,大体积的CSS、JS、图片资源会拖慢首页渲染速度。可以在application配置中添加如下配置优化:
# 静态资源缓存时间1天 spring.web.resources.cache.period=86400 # 开启静态资源gzip压缩 server.compression.enabled=true server.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
- 反向代理层配置不合理
Daily Razor的Java托管服务前端通常有统一的反向代理层做请求转发,如果代理层的HTTPS握手、请求转发规则配置不合理,也会增加请求耗时。可以通过浏览器开发者工具的网络面板查看请求的Timing数据,定位是DNS、TCP握手、SSL握手还是服务端处理的耗时过高,再针对性排查。
内容的提问来源于stack exchange,提问作者Julius Fasema
相关产品推荐
相关产品推荐

