?JProfiler 11.0重要新功能:
发送请求的HTTP探测
远程追踪HTTP请求
改进了异步呼叫追踪
对KotlinCoroutines的异步追踪
全新的明暗外观和感觉基于IntelliJIDEA,支持Windows和Linux的HighDPI
JPController的非交互模式
IDE集成的自动过滤器检测
分配抽样
改进了会话设置
改进了对IBM和OpenJ9 JVM的支持
SSH连接改进
Heap walker改进
支持Java 12 +分析
已添加传出请求的HTTP探测。同时测量同步和异步调用。支持的HTTP客户端包括:
java.net.URL连接
Java HTTP客户端(Java 11 +)
Apache Http客户端 4.x
Apache异步Http客户端4.x
OkHttp 3.9 +
Jersey(JAX-RS)异步客户端2.x
RestEasy异步客户端3.x
CXF异步客户端3.1.1+
您可以选择是将请求主体的消耗包括在时间度量中,还是在响应代码可用时停止计时。此设置可以随时更改。
与其他探测一样,您可以选择在调用树视图中注释HTTP请求。默认情况下,HTTP请求的描述是不带查询的URL,可以选择保留探针事件视图的完整URL。或者,您可以配置一个脚本来构造HTTP请求的描述,这对于获得有用的热点可能很重要。
现在可以在JVM之间追踪HTTP调用。在服务器端使用受支持的HTTP客户端和servlet容器时,调用站点和执行站点可以双向导航。
调用站点会得到一个特殊的图标和一个超链接,显示服务器JVM中的执行站点,必须在单独的窗口中对其进行概要分析并打开,以便导航工作。
每个调用站点分别记录执行站点,这样您就可以单独分析不同类型的请求。每个执行站点由一个插入到调用树中的特殊节点表示。
异步执行可以内联。调用树视图和热点视图现在都有一个用于此目的的“内联异步执行”调用树分析。如果异步追踪处于活动状态,则调用树上方的状态显示可以方便地访问创建内联视图的操作。另外,调用树中截获异步调用的节点具有相应的超链接。
在调用树分析中,“异步执行”节点显示来自执行站点的调用树。默认情况下,异步节点下面的时间不会添加到树中的父节点中,以显示调用的非阻塞性质。
您还可以选择添加时间,就像呼叫被阻塞一样。这对于分析哪些调用堆栈导致大多数时间花费在异步执行站点上很有用。
当异步追踪没有被激活时,JProfiler会检测在JVM中发生了哪些异步追踪类型,并在状态栏中向您显示它们。只需单击一次,即可激活追踪。
要快速查看激活了哪些异步追踪类型,请将鼠标悬停在状态栏图标上,然后单击它以调用配置对话框。
如果异步调用源自未经归档的调用堆栈,那么默认情况下不会记录这些调用,以避免将分析与框架内部搞混。如果检测到此类已筛选的异步调用,则异步状态栏将提供为这些调用打开录制的操作。
已添加对追踪Kotlin Coroutines的支持。Coroutines是以多平台方式使用Kotlin进行异步编程的基础。如果没有专用的工具支持,那么涉及Coroutines的调用树将被高度分割,并且会丢失很多关于因果关系的信息。
当激活对Kotlin Coroutines的追踪时,“内联异步执行”调用树分析会生成一个显示跨越挂起边界的调用堆栈的调用树。如果应用于热点视图,调用树分析将显示在第一个挂起方法调用时终止的回溯。
Kotlin协同工作追踪还测量协同工作暂停的时间,并在内联调用树的单独节点中显示这些时间。这需要确定协同程序执行总共需要多长时间。如果只关心Coroutines的实际处理时间,则可以隐藏挂起时间。
JProfiler有新的光明和黑暗的外观和感觉。外观和感觉基于IntelliJ IDEA Darcula的外观和感觉及其光导数。在Windows、Linux和MacOS上,这些外观和感觉都支持HiDPI。在Windows和MacOS上,JProfiler与“JetBrains Runtime”OpenJDK捆绑在一起,后者比默认JDK具有更好的HiDPI支持。
外观和感觉的默认设置现在是“自动”,如果操作系统处于暗模式,则选择暗主题,否则选择暗主题。此检测目前在MacOS 10.14+和Windows 10 Build 1809+上实现。
已添加JPController的非交互模式。JPController是用于控制记录和保存快照的命令行可执行文件。除了现有的交互模式之外,您现在还可以自动分析会话,而无需手动输入。
对于自动调用,您可以传递[pid | host:port]来选择一个已分析的JVM以及非交互参数。从stdin或用--command文件参数指定的命令文件读取命令列表。
用于此非交互模式的命令与JProfiler MBean中的方法名相同。它们需要相同数量的参数,用空格分隔。此外,还提供了sleep命令。
例如,命令序列可能如下所示:
addBookmark "Hello world"
startCPURecording true
sleep 10
stopCPURecording
saveSnapshot /path/to/snapshot.jps
自动检测IDE集成的调用树过滤器。对于新的会话,IntelliJ IDEA、eclipse和NetBeans的IDE集成现在扫描所分析项目的源包,并相应地设置包含过滤器。与默认的独占筛选器相比,包含筛选器产生的结果要好得多。
如果所有具有可编辑源文件的包都具有公共前缀包,则将使用该包,否则将单独添加包含类的所有顶级包。
此检测将仅在第一次分析项目时执行,并且不会丢失调用树筛选器设置中的任何手动更改。在“会话设置”对话框的“定义筛选器”选项卡上,可以使用“重置”按钮强制重复此计算。
分配记录的采样大大降低了分配记录的高开销。默认情况下,每记录10次分配,与记录所有分配相比,这大致将开销减少到1/10。
对于实时会话,可以在不丢失任何数据的情况下动态调整采样率。
会话设置已改进。先前单独的“Profiling settings”对话框已集成到新会话设置对话框中。
您现在可以轻松地将其他会话的选定部分复制到当前会话配置中。
现在,您可以从“default session”对话框配置默认会话。所有新会话都以这些默认值开始。
在默认会话中,现在可以为新会话禁用初始问题,即是否应使用采样或检测。
如果连接到JVM的配置文件已经使用了不同的会话设置,JProfiler将为您提供保留以前会话设置的选项。启动分析会话后,可以在会话设置对话框中检查这些以前的设置。这种机制消除了耗时的类转换。
在启动时应用分析设置而不使用JProfiler UI更加方便。在-agentpath VM参数中使用“id”或“config”选项时,您不再需要指定现在隐含的“nowait”选项。如果配置文件只包含一个会话,则不再需要“id”选项。用于分析的典型VM参数现在将如下所示:
-agentpath:/opt/jprofiler/bin/linux-x64/libjprofilerti.so=config=~/jprofiler_config.xml
这个字符~现在替换为所有平台上的主目录,JProfiler config文件的默认名称已更改为jprofiler_config.xml,以减少通用性。
在没有JProfiler UI的远程计算机上配置分析会话或脱机分析会话时,有时需要检查配置文件并进行手动更改。在这个版本中,配置文件格式已经得到了改进,通过省略默认设置并使配置的所有方面都易于理解,从而使其不再那么冗长。
浮动许可现在可以通过SSH工作。具有浮动许可证的客户现在可以使用与配置的JVM的SSH连接相同的配置来配置与浮动许可证服务器的SSH连接。
已将char和byte数组的表格显示添加到堆查询器的传出引用视图中。现在可以更容易地解释大量数据。
此外,char数组现在在实例旁边显示其字符串值。
已实现调用树中的缩短包名称。此可选设置可在“视图设置”对话框中配置。
对于具有深包结构的代码基,缩短的包名称减少了显示文本的数量,并使其更容易集中于类和方法名称。
改进了对IBM和OpenJ9 JVM的支持。此版本在许多领域带来了与HotSpot JVM的功能对等性:
支持堆查询器中的原始数据
现在支持堆查询器中的所有检查
IBM 8+JVM支持文件和进程探测
“保存HPROF快照”用户界面操作和“创建HPROF堆转储”触发操作现在生成PHD转储
支持分析Java 12+。此外,当从JProfiler UI启动会话时,现在支持所有OpenJDK变体。