我现在有一个springboot应用程序,即使服务器处于空闲状态,线程也继续增加。随着时间的推移,这将导致机器崩溃。导致很高的内存和CPU使用率。
我尝试设置server.tomcat.max-threads = 5,但我很不幸,线程不断增加。
顺便说一下,这些是我的组件:-休息模板-OK HTTP-Hikari CP- Springboot和Spring框架(@RestController和@Service)-HttpInterceptor(请求和发送)-Hibernate / JPA
我还使用htop和我创建的JNI来计数线程。JNI PID / TID可以获取htop的轻量级进程ID。因此,此JNI可以虚拟地映射该LWPID和Java线程。
任何帮助都感激不尽。
谢谢,
我的问题现在解决了。 这些是我观察到的事情,也是问题的根本原因。
首先,我为我进行的每个查询创建了Hikari线程池和本地实体管理器工厂Bean,这些查询在应用程序的生命周期中应该只执行一次,或者对于每个数据源连接都应该执行一次。这是线程不断产生的主要原因。线程池/ LocalEntityManagerFactoryBean的创建与此代码段有关:
HikariDataSource connectionPoolDatasource = new HikariDataSource(connectionPoolConfig); localContainerEntityManagerFactoryBean.setDataSource(connectionPoolDatasource); localContainerEntityManagerFactoryBean.setJpaProperties(jpaProperties); localContainerEntityManagerFactoryBean.afterPropertiesSet();
参考:https : //groups.google.com/forum/#! topic/ hikari-cp/IsVEn-D6oFA请参阅Brett Wooldridge对钟仁明的回应。
最后,我每次查询或连接到数据库时都没有调用Connection.close()。 这也导致线程没有被终止或关闭。 以及保持数据库连接打开。
干杯!