我维护着一个Spring应用程序,该应用程序在过去6个月中一直稳定运行,大约需要90秒才能在Tomcat中启动。但是,在过去几周的某个时间里,启动时间突然突然增加了-现在好一天是3分钟,坏一天则是11分钟。这是一台运行在我的笔记本电脑上的本地开发服务器,可以与AWS上托管的一些远程数据库进行通讯。
我通勤,所以我通常在家庭网络上运行该应用程序。昨天我碰巧在一家咖啡店里,瞧瞧,我的启动时间一直回落到90秒左右。回到家,我每次回到3到5分钟之间。
因此,我在同一位置使用相同的笔记本电脑/代码“快速”启动(如果90秒是快速的,但这全都是相对的!),而在另一位置启动缓慢。这使我认为这与我的家庭网络和/或Internet连接有关,但是我不确定要特别注意什么-我绝不是网络专家,所以我不在这里。 >
我首先想到的是,过去几周我的WiFi性能可能下降了。但是我通过WiFi上网速度下降了50-60Mbps / 11上升了,这与我使用www.speed.io在咖啡店测得的结果相当。我的ping和抖动明显更糟,但我认为这不会影响Tomcat的启动。
我还尝试禁用WiFi并与路由器(旧的Airport Extreme基站,A1354)建立物理以太网连接。这使我的速度降低了200 + Mbps,ping /抖动低于10ms(比咖啡店要好得多) ),但该应用程序仍然运行缓慢。因此,我认为这不是我的连接速度或与WiFi干扰有关的问题。
只是为了确保我没有引入引起这种情况的代码更改,我已经从几周前恢复到该版本。但是,启动仍然很慢(无论如何,它在一个位置上很慢而在另一个位置上很快的事实使我认为它与代码无关)。
我在项目中添加了spring-startup-analysis(https://github.com/lwaddicor/spring-startup-analysis),以查看Bean创建是否缓慢。虽然在家里大约只有5秒钟。
我将Tomcat实例连接到jvisualvm。这是我第一次使用该工具,所以我摸索了一下。情况看起来还不错,但我不确定它们是否看起来很糟糕。
基本上我正在寻找有关如何解决此问题的建议,部分原因是我不是Spring专家,也不是它/ Hibernate在启动/自动装配/ bean创建等过程中所做的工作。对我来说有点神秘。例如,如果Spring / Hibernate在启动时进行某种数据库内务处理,那么我应该集中精力处理家庭网络与AWS服务器之间的网络时序,还是那不是一个重要因素?我的网络上是否可能有某些路由器设置可能是罪魁祸首?还是有一种推荐的方法来查看在Tomcat启动过程中花费了这么长时间的实际时间(某些Tomcat日志文件/设置可能会指示我正确的方向)?