软件版本: os: centOS 6.5 (阿里云) spring boot: 1.4.1 (自带的 tomcat 8.5.5 )
部署方式: java -jar xxx.war (直接运行 war 包方式) 端口 8081
cache 相关配置: spring.resources.cache-period = 1 spring.resources.chain.enabled = true
状况描述: 1.访问 www.abc.com:8081/a.html , a.html 返回 304 ,但会花费 1.5s , a.html 中的各种 css 和 js 也都返回 304 ,每个 15ms 左右。 2.在 20 秒(有可能是 15 秒,大概是 10 到 20 秒之间)内刷新此页,无论是 a.html 还是其中的资源,仍然返回 304 ,但 a.html 明显提升速度,仅花费 15ms 左右和其他资源一样,这 20 秒内反复刷新都很快,所有资源花费 15ms 左右。但是一旦超过 20s 后再访问, a.html 又会花费 1.5s 。 3.同样一台服务器,一个非 spring boot 的网站也在同时运行,用的是 tomcat 8 ,端口 8080 。这个网站就没有此问题。 4.访问接口或者 jsp 也同样,虽然每次都返回 200 ,但是也会出现和 1 、 2 描述的相同情况。 5.访问不存在的资源也会出现这种情况(返回 404 )。
思考: 1.由于访问所有资源(静态、接口)都会出现这种情况,所以应该不是静态资源缓存的问题,接口什么的没加过缓存。 2.由于同一台机器的其他服务都没问题,所以目前推断是 boot 自带的 tomcat 有问题。
想知道这种现象的原因是什么,所以来这里问问各位~,哪里写的不清楚还请大家指明,谢谢~
1
ljcarsenal 2017-02-19 11:37:33 +08:00 via Android
静态资源文件交给 nginx 啊,另外这些不变的东西应该设置成强缓存 反回 200 from cache 。
不懂 java 接口也有问题的话应该就是 tomcat 的原因 不过上边说的是从前端方面应该进行的优化 |
2
srx1982 OP @ljcarsenal 谢谢回复,如果这个问题解决不了那上线的时候只能用 nginx 了,实际上我还是比较关心为什么会发生这种事情。
|
3
ljcarsenal 2017-02-19 11:48:14 +08:00 via Android
@srx1982 我不知道自带的那个服务器是不是只是为了开发用的。其他脚本语言的开发框架都会自带一个开发的服务器 这玩意性能很弱 只是开发的时候使用的
|
4
srx1982 OP @ljcarsenal 是个嵌入式的最简版,也有可能是这个原因
|
5
bdbai 2017-02-19 13:08:06 +08:00 via Android
@ljcarsenal 200 from cache 不是返回的。还有 Swoole 、 Tornado 以及 Node.js 搭的服务都是必须自己运行的。
|
6
ljcarsenal 2017-02-19 14:42:06 +08:00 via Android
@bdbai 嗯 我意思就是不向服务器请求 直接使用缓存
|
7
cathzhang 2017-02-19 15:32:00 +08:00
性能问题连代码都不贴怎么看?代码里有基础的 log 输出吗?
做一下 jvm 线程监控。 查看一下页面缓存相关的配置。 查看一下数据库连接池配置。 |
8
srx1982 OP @cathzhang 我感觉不是代码导致的性能问题,所以就没贴。无论是静态资源还是接口,甚至是访问不存在的资源路径都会出现这个问题。所以我觉得可以排除页面缓存和数据库连接池的问题。我回头会做一下 jvm 监控试试,谢了~
|
9
selrain 2017-02-19 22:27:04 +08:00 via Android
关注
|
10
bwhujie 2017-04-19 08:33:04 +08:00
请问楼主是怎么解决内嵌 tomcat 运行缓慢的?
|
12
bwhujie 2017-04-19 15:28:07 +08:00
我们这里页面也遇到了这种问题, 页面访问时快时慢, 最慢的居然 10s, 很莫名其妙的。
|
13
jack80342 2017-10-31 21:48:58 +08:00
这几天翻译了 Spring Boot 最新的官方文档,欢迎👏fork,https://www.gitbook.com/book/jack80342/spring-boot/details
|