springboot 部署到外部 tomcat 后很卡

做的网页后台,我的项目是打成 war 包以后部署在外部 tomcat 上的,运行的时候就感觉服务器被我的程序拖得很卡,访问网页也感觉比较卡,有时候登陆完了啥都不显示,要刷新几遍才加载出来。

我在 ctrl+c 停止服务的时候,爆出很多严重的警告或者错误,都是 “Web应用程序[XXX]似乎启动了一个名为[XXXX]的线程,但未能停止它。这很可能会造成内存泄漏”, 线程名字一看就是一个线程池里有好多线程:pool-6-thread-1,pool-6-thread-2,pool-6-thread-3这样的。

我排查了一下,最多也就知道是因为我用了定时任务导致的,我有几个定时任务是加了 @Scheduled,像每天零点执行的,每小时执行一次的都有。现在是只要我在启动类加了 @EnableScheduling,停止任务的时候就会出现上面很多线程的警告或错误,网上查过加 webListener 和 ServletContextListener 的实现,都不好使,这个问题有解决的方法吗?我的程序这么卡是不是因为这些线程?

上xxl-job

你可以先分析一下日志,跟踪一个请求看看。是具体卡在什么地方,什么耗时。这样才好确定问题点。

请求都还是能完成的,就是卡,每一个请求都会卡一些,我看 tomcat 的日志,就是那个 catalina.log
给我返回我最多就追踪到类似这样的: java.util.concurrent.locks.LockSupport.park ,查了下好像是java 内部处理锁的东西,可能就是线程和锁的处理上有潜在问题啥的