V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Sponsored by
LinkedIn
不坐班的神仙工作 · 去任何你想去的地方远程,赚一线城市的工资
2000 个不用出门 Social 的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
srx1982
V2EX  ›  问与答

spring boot 做的网站访问隔几秒会慢一次,想不出来是什么问题

  •  
  •   srx1982 · 2017-02-19 11:06:51 +08:00 · 7343 次点击
    这是一个创建于 2048 天前的主题,其中的信息可能已经有所发展或是发生改变。

    软件版本: 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 条附言  ·  2017-02-20 13:02:07 +08:00
    补充一下:本机调试的时候不会出现这种问题。

    暂时解决方案:把 war 包部署到正常的 tomcat 上,没有再出现过这种情况。先绕个路解决一下,回头再硬磕。
    13 条回复    2017-10-31 21:48:58 +08:00
    ljcarsenal
        1
    ljcarsenal  
       2017-02-19 11:37:33 +08:00 via Android
    静态资源文件交给 nginx 啊,另外这些不变的东西应该设置成强缓存 反回 200 from cache 。
    不懂 java 接口也有问题的话应该就是 tomcat 的原因 不过上边说的是从前端方面应该进行的优化
    srx1982
        2
    srx1982  
    OP
       2017-02-19 11:43:19 +08:00
    @ljcarsenal 谢谢回复,如果这个问题解决不了那上线的时候只能用 nginx 了,实际上我还是比较关心为什么会发生这种事情。
    ljcarsenal
        3
    ljcarsenal  
       2017-02-19 11:48:14 +08:00 via Android
    @srx1982 我不知道自带的那个服务器是不是只是为了开发用的。其他脚本语言的开发框架都会自带一个开发的服务器 这玩意性能很弱 只是开发的时候使用的
    srx1982
        4
    srx1982  
    OP
       2017-02-19 11:55:57 +08:00
    @ljcarsenal 是个嵌入式的最简版,也有可能是这个原因
    bdbai
        5
    bdbai  
       2017-02-19 13:08:06 +08:00 via Android
    @ljcarsenal 200 from cache 不是返回的。还有 Swoole 、 Tornado 以及 Node.js 搭的服务都是必须自己运行的。
    ljcarsenal
        6
    ljcarsenal  
       2017-02-19 14:42:06 +08:00 via Android
    @bdbai 嗯 我意思就是不向服务器请求 直接使用缓存
    cathzhang
        7
    cathzhang  
       2017-02-19 15:32:00 +08:00
    性能问题连代码都不贴怎么看?代码里有基础的 log 输出吗?
    做一下 jvm 线程监控。
    查看一下页面缓存相关的配置。
    查看一下数据库连接池配置。
    srx1982
        8
    srx1982  
    OP
       2017-02-19 16:16:36 +08:00
    @cathzhang 我感觉不是代码导致的性能问题,所以就没贴。无论是静态资源还是接口,甚至是访问不存在的资源路径都会出现这个问题。所以我觉得可以排除页面缓存和数据库连接池的问题。我回头会做一下 jvm 监控试试,谢了~
    selrain
        9
    selrain  
       2017-02-19 22:27:04 +08:00 via Android
    关注
    bwhujie
        10
    bwhujie  
       2017-04-19 08:33:04 +08:00
    请问楼主是怎么解决内嵌 tomcat 运行缓慢的?
    srx1982
        11
    srx1982  
    OP
       2017-04-19 11:41:49 +08:00
    @bwhujie 不用内嵌版本了,后来就部署到正常的 tomcat 上了
    bwhujie
        12
    bwhujie  
       2017-04-19 15:28:07 +08:00
    我们这里页面也遇到了这种问题, 页面访问时快时慢, 最慢的居然 10s, 很莫名其妙的。
    jack80342
        13
    jack80342  
       2017-10-31 21:48:58 +08:00
    这几天翻译了 Spring Boot 最新的官方文档,欢迎👏fork,https://www.gitbook.com/book/jack80342/spring-boot/details
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2733 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 11:38 · PVG 19:38 · LAX 04:38 · JFK 07:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.