IDEA方法断点导致项目启动缓慢
前几天遇到一个Springboot微服务项目启动缓慢的问题,表现很奇怪,其他服务都正常启动,最多也就耗时两分钟,某个服务启动得特别慢,甚至用了半小时。
启动后,涉及该服务的某个接口响应也很慢,甚至超过30秒,然而对应的sql语句在数据库中执行是秒出结果。
它以前并不会这么慢,最近也没有什么特殊的代码改动。一开始以为是环境和中间件的问题,排查了很久发现竟然发现是方法断点的问题!
找出问题耗费了我一个上午,记录一下。助我解决问题的文章:IDEA DEBUG 启动慢,启动卡死,本地IDEA环境,千万千万不要在方法上打断点!太坑了!-腾讯云开发者社区-腾讯云
排查
最开始注意到的是接口慢的问题,接口返回数据超过限时导致连接断开报错,没法测试页面的功能。由于此处最近并没有后端代码修改,以为是用了很久的笔记本电脑终于开始卡了,但其他的接口又很快。
那是一个查询数据、进行一些计算后返回前端的接口。是SQL语句执行过慢?取SQL到数据库一执行,秒出。
是后端业务层代码太屎山?多打几个断点,用二分法不断逼近可能的导致速度慢的代码行,发现是调用Mapper的DAO层语句,不对劲啊!
抱着怀疑的心理,给对应的表加了索引,SQL语句在数据库执行快了些,但后端接口仍然会超时。
我尝试重启服务,更大的问题来了——这个服务竟然启动了半个多小时!这还怎么开发啊!
研究启动日志时发现,有几个地方会启动五分钟左右,加起来就半小时了。我以为找到了问题的关键,就开始研究日志里面的Redis、Nacos、数据库连接池、Flowable等组件为什么启动那么慢。
数据库
首先是数据库,启动日志中发现连接了5分钟,而我用其他数据库连接工具和以前一样可以秒连,为什么呢?
AI告诉我,在配置数据库连接池时减少等待时间。
1 | spring: |
然后再开个懒加载:
1 | spring: |
我一看,max-wait原本配置的时长是600000ms,也就是5分钟,尝试减少之后,确实启动瓶颈不在这里了。
虽然解决了一部分问题,但这还是令我摸不着头脑。
Flowable
工作流引擎那部分AI说也能优化,但我配置之后并没有多大变化。
1 | flowable: |
Feign
从启动日志看到有Feign相关的警告,思索会不会Feign扫描太多内容而卡了,但其他服务也有这个提示,应该影响不大,看日志打印时间也不是启动速度的瓶颈,就略过它了。
1 | 2025-08-08 08:09:25.008 | INFO 18804 | main [TID: N/A] o.s.c.openfeign.FeignClientFactoryBean | For 'bpm-server' URL not provided. Will try picking an instance via load-balancing. |
Nacos
接上文,那个接口确实用到了调用其他服务的内容,如果不是Feign的问题,会不会是使用其他服务时,找服务太久?
由于正在做的项目只是拿Nacos作为服务注册和发现中心而不是配置管理中心,而且配置存储用的是内置数据库,因此我将对应的数据文件夹改了名字,找不到数据的Nacos会重新初始化一个。
然而不是这个的问题,此举无效。
Redis
最后我将怀疑的目光投向了Redis,虽然不知道为什么它那里会卡十几分钟,但这个服务用到Redis的地方很少,先禁用掉,再重启一次。
没用!
解决
这个时候已经和这个神奇的问题对抗大半个上午了,活儿一点没干,我的心情也变得焦虑起来,心想直接启动不用调试模式启动应该至少会快一些吧,不管了,先把开发任务完成,慢一些就慢一些吧。
结果竟然很快就启动了。带着这份关键词,我很快搜到了很不可思议的原因——我debug的时候随手打在方法名上面的断点,竟然是罪魁祸首!
助我解决问题的文章:IDEA DEBUG 启动慢,启动卡死,本地IDEA环境,千万千万不要在方法上打断点!太坑了!-腾讯云开发者社区-腾讯云
我之前还真没想过,断点的位置竟然也能造成这种问题,还以为在方法名上和在方法内部一样。
IDEA方法断点导致项目启动缓慢