小编典典

即使server.tomcat.max-threads = 5,Springboot也会增加线程

tomcat

我现在有一个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线程。

任何帮助都感激不尽。

谢谢,


阅读 1422

收藏
2020-06-16

共1个答案

小编典典

我的问题现在解决了。
这些是我观察到的事情,也是问题的根本原因。

首先,我为我进行的每个查询创建了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()。
这也导致线程没有被终止或关闭。
以及保持数据库连接打开。

干杯!

2020-06-16