推断为什么线程在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应用程序中增加了的主要内容,如果未能解决你的问题,请参考以下文章