V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
BaiMax
V2EX  ›  问与答

求助: SpringBoot 应用闲置一晚上后,第一次请求特别慢

  •  2
     
  •   BaiMax · 2020-04-26 08:40:00 +08:00 · 3334 次点击
    这是一个创建于 1676 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主要是 mybatis 多数据源(配置了两个数据库,oracle 和 sql server,但是只使用了一个) + druid 。

    测试了在 win 和 linux 分别部署,结果是一样的,第二天的第一次请求特别慢,达到 1-2 分钟。

    我在请求 pending 的时候取了 thread dump,不太会看。。。

    thread dump: https://note.ms/evah

    第 1 条附言  ·  2020-05-09 15:07:23 +08:00
    经过较长时间的跟踪记录,问题应该不在程序,估计是那台 Oracle 数据库配置有问题。
    现在做了定时任务每分钟查一次并记录时间,正式环境未重现
    21 条回复    2020-04-28 16:54:01 +08:00
    watzds
        1
    watzds  
       2020-04-26 09:06:30 +08:00 via Android
    可能数据库连接闲置后断开了,第一次要重连
    watzds
        2
    watzds  
       2020-04-26 09:07:22 +08:00 via Android
    不过一两分钟也太慢了
    BaiMax
        3
    BaiMax  
    OP
       2020-04-26 10:06:36 +08:00
    @watzds 那如何避免这个问题呢?目前是部署上去还没有发布,所以没什么请求。担心到正式环境以后重现
    securityCoding
        4
    securityCoding  
       2020-04-26 10:15:33 +08:00
    开启 selelct 1 连接探测
    mazyi
        5
    mazyi  
       2020-04-26 10:39:20 +08:00 via iPhone
    看日志慢在哪里啊,dump 没用
    xiaoxinshiwo
        6
    xiaoxinshiwo  
       2020-04-26 11:07:36 +08:00
    mybatis 设置 dialect 属性
    BaiMax
        7
    BaiMax  
    OP
       2020-04-26 11:20:48 +08:00
    @mazyi 跟踪过就是慢在 mapper 执行数据库查询那里
    BaiMax
        8
    BaiMax  
    OP
       2020-04-26 11:23:15 +08:00
    @securityCoding 项目集成了 springboot admin,日志里可以看到每几秒都有 select 'hello' from dual, 这个是不是同样的效果?
    BaiMax
        9
    BaiMax  
    OP
       2020-04-26 11:42:23 +08:00
    我贴一下配置文件
    https://note.ms/ateu
    otakustay
        10
    otakustay  
       2020-04-26 11:44:35 +08:00
    简单点,端到端,写个脚本每 1 分钟去 curl 一下首页就好了
    fewok
        11
    fewok  
       2020-04-26 11:50:04 +08:00
    换个角度,会不会是数据库的问题?
    BaiMax
        12
    BaiMax  
    OP
       2020-04-26 11:52:38 +08:00 via Android
    @xiaoxinshiwo 那多数据源应该怎么设置?
    xiaoxinshiwo
        13
    xiaoxinshiwo  
       2020-04-26 11:56:15 +08:00
    @BaiMax #12 多数据源一样设置啊,只不过有个数据源设置为主数据源
    fmumu
        14
    fmumu  
       2020-04-26 11:57:28 +08:00 via Android
    多次 dump 看看线程在干嘛
    yukiloh
        15
    yukiloh  
       2020-04-26 12:17:01 +08:00 via Android
    我遇到的情况是,数据库是 maria5.x,最后推断是 maria 的配置的存活时间< springboot 配置的时间(两者才用的时间制式不一样),导致假死(可能,因为最后都没搞定,换了高版本解决)
    tab16360
        16
    tab16360  
       2020-04-26 12:46:08 +08:00 via Android
    https://x1024.com/index.php/archives/14/
    看看这个是不是能解决
    gengz
        17
    gengz  
       2020-04-26 12:51:51 +08:00
    druid:
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 30000
    validationQuery: select 'x'
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false



    druid 的配置, 你参考下
    senninha
        18
    senninha  
       2020-04-26 12:58:59 +08:00
    录个 JFR 分析一下啊
    mejee
        19
    mejee  
       2020-04-26 13:02:46 +08:00
    可能是数据库连接池里都超时了,然后请求的时候拿出连接来,一个个都超时了,比较慢,参考#17
    hengyunabc
        20
    hengyunabc  
       2020-04-26 13:02:47 +08:00
    BaiMax
        21
    BaiMax  
    OP
       2020-04-28 16:54:01 +08:00
    上次的 dump 好像没什么内容,更新了一下正文的 Thread dump..
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5266 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 01:16 · PVG 09:16 · LAX 17:16 · JFK 20:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.