首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Springboot增加线程,即使server.tomcat.max-线程=5

Springboot增加线程,即使server.tomcat.max-线程=5
EN

Stack Overflow用户
提问于 2018-12-07 13:27:31
回答 2查看 1.6K关注 0票数 0

我现在有一个springboot应用程序,即使服务器处于空闲状态,线程也在不断增加。这会导致机器随着时间的推移而崩溃。导致很高的内存和CPU使用率。

我试着设置server.tomcat.max-线程=5,但是我非常不走运,线程不断上升。

顺便提一下,这些是我的组件:- Rest模板- OK Hikari Springboot和Springboot (@RestController和@Service) - HttpInterceptor (请求和传出)- Hibernate / JPA

我还在使用htop和我创建的JNI计算线程。JNI PID/TID可以获得htop的轻量级进程ID。因此,这个JNI实际上可以映射LWPID和java线程。

任何帮助都将不胜感激。

谢谢,

阿塔尼斯·泽拉图

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-24 02:52:02

我的问题现在解决了。

这些都是我观察到的,也是问题的根源。

首先,我为每个查询创建了Hikari和,这些查询应该在应用程序生命期内只执行一次,或者为每个数据源连接创建一次。这是线程不断繁殖的主要原因。创建线程池/LocalEntityManagerFactoryBean属于以下代码段:

代码语言:javascript
复制
HikariDataSource connectionPoolDatasource = new HikariDataSource(connectionPoolConfig);

localContainerEntityManagerFactoryBean.setDataSource(connectionPoolDatasource);
localContainerEntityManagerFactoryBean.setJpaProperties(jpaProperties);
localContainerEntityManagerFactoryBean.afterPropertiesSet();

参考资料:https://groups.google.com/forum/#!topic/hikari-cp/IsVEn-D6oFA

见布雷特·伍尔德里奇对任明钟的回应。

最后,我不是每次查询或连接到DB时都调用Connection.close()。

这也会导致线程不被终止或关闭。

以及保持DB连接打开。

参考资料:Getting Database connection in pure JPA setup

干杯!

票数 0
EN

Stack Overflow用户

发布于 2018-12-12 03:25:46

所以我打赌tomcat只有5个线程,而服务器中的其他一些技术就是创建这些额外的线程。现在tomcat遵循其线程的命名方案。通常,这5个线程的命名如下:

代码语言:javascript
复制
http-bio-8080-exec-1
http-bio-8080-exec-2
http-bio-8080-exec-3
...

你能拍到照片。因此,如果您列出了VM中线程的名称( windows上的ctrl-页面中断,linux上的杀害-3 JAVA_PID,jconsole可能是您的最佳选择。您应该只看到1-5的线程命名模式。所有其他线程都将由其他线程拥有。Tomcat在执行线程之外确实有额外的线程,但是它们是固定数量的(停止线程、main等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53670564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档