下面是当我在采样模式下探测我的应用程序时,JProfiler的"CPU Views“的”热点“的屏幕截图。堆栈的顶部(占CPU使用率的76%)被"java.lang.Thread.run“占用。
我的问题是,这些线程是什么?这些线程是负责从第二个位置和下面(在绿色框中标记)显示其他热点的线程吗?或者这些线程正在执行一些后台任务,如垃圾收集和所有(相应的方法在热点列表中不可见)?

发布于 2016-10-24 13:51:29
大多数per服务器(Java和其他,包括JBoss)遵循“每个请求一个线程”的模型,即每个HTTP请求完全由一个线程处理。这个线程通常会花费大部分时间等待数据库请求之类的事情。web容器将根据需要创建新的线程。
这些线程不负责垃圾收集活动。JVM总是在专用线程中执行GC,即“GC线程”。每当GC线程处于活动状态时,它们就会与实际的“应用程序线程”竞争可用处理器,从而占用CPU时间。
为了回答你的问题,是的,所有与用户请求相对应的任务都会在这里考虑。换句话说,您的CPU花费了76%的时间来处理用户请求。
所有嵌套的方法调用时间都是在图像中显示的第一个热点中捕获的。
发布于 2019-04-08 18:31:23
这部分很可能负责JEE/JSE内部的东西,比如解包JAR。默认情况下,JProfile filters处于禁用状态。如果这种隐藏的RAM/CPU消耗占据了您的大部分资源,这意味着您的应用程序本身并没有真正消耗任何资源,或者只是没有做任何有意义的工作;-)
禁用筛选器(会话设置->筛选器设置)并重新启动分析。您将看到"Thread.run“背后发生了什么。
https://stackoverflow.com/questions/40211353
复制相似问题