推断为什么线程在java应用程序中增加了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推断为什么线程在java应用程序中增加了相关的知识,希望对你有一定的参考价值。

上下文 我在服务器上有一个度量标准,用于发布我在任何给定时间拥有的线程数。在最近的部署中,我注意到线程数平均增加了大约30个线程(最初停滞在370左右,现在一直是400个线程)。

我做了什么 有许多包/可能性可能是这种增加的根本原因。这就是我研究分析线程的原因。我学会了如何获得并获得一个线程转储,但我看不出有关为什么创建这些线程/如何使用它们的任何有用信息。

我的服务没有受到负面影响(延迟/ CPU /内存)但我仍然希望根本导致此问题,因为它可能是内存泄漏的理由。

我的问题 如果有一些资源能够获得创建该线程的类/包,那将非常有用(我已经在线搜索了一段时间用于这样的资源)。

对root的任何建议都非常感谢!

答案

Find The Source Of Threads

如果您还没有使用Java Executors而不是直接处理Threads。如果您使用的是Executors,则可以为线程池中的线程定义名称。这些名称包含在java进程的线程转储中。因此,如果一个线程有一个自定义名称,您将知道哪个线程池创建了它。通常的做法是为应用程序中的不同类型的任务维护不同的线程池,并为每个池中的线程赋予不同的名称。这样,您可以确定在执行线程转储时应用程序的每个部分创建的线程数。有关如何定义自定义线程名称,请参阅this question

How To Limit Threads

ThreadPoolExecutor允许您定义池中最大线程数。因此,如果您知道所使用的所有池以及它们的最大大小,那么您应该能够定义可以在应用程序中运行的最大并发线程数。

您可能必须特别注意服务器,客户端和网络库,因为它们可能会创建自己的线程。库通常也会命名它们的线程,因此您可以在线程转储中搜索一个不熟悉的名称或堆栈跟踪,以确定它的来源。

以上是关于推断为什么线程在java应用程序中增加了的主要内容,如果未能解决你的问题,请参考以下文章

Java 线程池

在 Java 中完成任务时线程在增加但不减少

为什么Java线程数量及时增长的原因

Core Data 的推断映射模型创建(轻量级迁移)崩溃。线程问题?

面试突然问Java多线程原理,我哭了!

Java线程项目奇怪的行为,同时增加线程数