惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - cac2020

QA之三 - 变异测试 -- PITest QA之二 - 单元测试-- JaCoCo QA之二 - 单元测试-- JUnit5 + Mockito QA之二 - 单元测试--Mockito QA之二 - 单元测试--JUnit5 QA之二 -- 测试用例 QA之一 -- 常见测试类型和测试环境 密码学之三 —— MPC(TSS)、多签、时间锁 密码学之二 —— GPG、SSH、KMS 密码学之一 —— 三类算法 记录一次在线word转PDF的问题处理过程 分析Java堆Dump Java GC日志分析 Java线程Dump分析(TDA-Thread Dump Analyzer) Java基础故障处理工具 记录Arthas在一次性能调优过程中实践 中小型系统必要可行的性能测试实践--ArtHas调优实战 中小型系统必要可行的性能测试实践--jmeter落地实践 中小型系统必要可行的性能测试实践--性能测试理论基础
Java可视化故障处理工具-VisualVM
cac2020 · 2023-12-06 · via 博客园 - cac2020

VisualVM( All-in-One Java Troubleshooting Tool)是功能最强大的运行监视和故障处理程序之一,曾经在很长一段时间内是Oracle官方主力发展的虚拟机故障处理工具。 Oracle曾在VisualVM的软件说明中写上了“All-in-One”的字样,预示着它除了常规的运行监视、故障处理外,还将提供其他方面的能力,譬如性能分析(Profiling)。VisualVM的性能分析功能比起JProfiler、 YourKit等专业且收费的Profiling工具都不遑多让。 而且相比这些第三方工具, VisualVM还有一个很大的优点:不需要被监视的程序基于特殊Agent去运行,因此它的通用性很强,对应用程序实际性能的影响也较小, 使得它可以直接应用在生产环境中。这个优点是JProfiler、 YourKit等工具无法与之媲美。

官方文档:(VisualVM在jdk8之后分离出来单独发展。)

1、java8 visualVM

2、VisualVM

一、VisualVM两个连接方式

方式一:JMX方式

第一步:远程java应用需要加上如下启动参数    
# 远程服务器ip,即本机ip,不建议用 localhost、127.0.0.1
-Djava.rmi.server.hostname=XXX.XXX.XXX.XXX 
# 允许 JMX 远程调用(jdk6以下要加,以上默认开启)
-Dcom.sun.management.jmxremote
# 自定义 JMX 端口号和RMI端口
-Dcom.sun.management.jmxremote.port=8899
-Dcom.sun.management.jmxremote.rmi.port=8899(可以不加)
# 是否需要 ssl 安全连接方式
-Dcom.sun.management.jmxremote.ssl=false
# 是否需要密钥 
-Dcom.sun.managent.jmxremote.authenticate=false
第二步:配置jmxremote权限和密码    -Dcom.sun.managent.jmxremote.authenticate设置false也不行 也要输入用户、口令才能连接成功。
进入${jre.home}/lib/management目录:
# 根据密码文件模板拷贝一份
cp -r jmxremote.password.template jmxremote.password
#编辑jmxremote.password去掉monitorRole  QED 和 controlRole  R&D 前面的#注释 ,也可以自行定义账号和密码
#修改权限
chmod 0400 jmxremote.password
# jmxremote.access文件里用来设置账号对应的jmx操作权限,里面默认设置了两个monitorRole 和 controlRole 权限,如果自定义账号,这里也必须进行权限设置,设置哪些权限参考controlRole的设置。

方式二:jstatd连接.

#进入${JAVA_HOME}/bin创建新文件 jstatd.all.policy,编辑该文件,填入内容

grant codebase"file:${java.home}/../lib/tools.jar"{

    permission java.security.AllPermission;

};

# 给该文件加上执行权限

chmod +x jstatd.all.policy

#启动命令(在$JAVA_HOME/bin目录下执行) 命令中默认监听1099端口,可通过-p指定端口,hostname使用服务器的公网ip,若只在局域网内使用可使用本地ip。

nohup ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.2.211 -p 12345 &

两种方式都要配置,因为有些插件仅支持一种方式。比如MBeans需要JMX连接方式、VisualGC仅支持JStatd连接方式。

二、VisualVM四个基本选项卡

1、选项卡--概述

java应用信息,jvm参数设置、sysproperty参数设置。

2、选项卡--监视

监视cpu、线程、类加载、堆和永久代动态变化。可以手工执行GC垃圾回收、堆转储操作

3、选项卡--线程

监视所有线程活动状态,可以执行线程转储操作。

4、选项卡--抽样器,用于性能分析。

通过堆程序运行时cpu耗时、内存分配抽样并快照数据,用于性能分析。

三、VisualVM 堆快照分析

VisualVM支持载入堆快照然后进行分析。可以于MAT互补。

四、VisualVM强大在于接入各种功能强大的插件

1、插件更新地址设置

地址:https://visualvm.github.io/pluginscenters.html   选择版本对应的地址进行设置

2、线程相关插件

2.1、Threads Inspector插件

线程选项卡下一个功能,可以查看线程堆栈信息。

2.2、TDA(Thread Dump Analyzer)插件

用于分析线程转储。

使用参考:TDA

3、堆内存相关插件

3.1 VisualGC插件

使用参考:VisualGC

3.2 GC日志分析 GCViewer

GCViewer不是VisualVM插件,由于相关 放在这里一起介绍。

参考:GCViewer

4、源代码跳转

 (1)源代码目录设置举例:下面这种方式可以选中多个模块下代码,配置的原则就是 VisualVM里的代码一般都是com.xxxx或者org.xxx开头 那么选择路径就要到com或org上一层 ,也可以直接选择jar包。

 

 (2)设置源代码查看器

使用notepad++:

例:D:\notepadd++\notepad++.exe {file}  后面只需要跟文件名

使用Idea:

例:D:\JetBrains\IntelliJIDEA2019.3.5\bin\idea64.exe {file}:{line}    后面跟文件名和行号

使用参考:Source Support

5、启动性能分析插件-Startup Profiler

6、动态跟踪插件-BTrace.

其他插件:

Tracer:使用各种探针从应用程序收集指标,并在时间轴中显示数据。数据以图形和表格形式显示,并可导出为通用格式,供外部工具进一步处理。
Buffer Monitor:监控ByteBuffer.allocateDirect创建的直接缓冲区和FileChannel.map创建的映射缓冲区的使用情况
OQL Syntax Support:堆转储分析里面的OQL增强编辑器。参考:OQL
JConsole Plugins Container:支持JConsole扩展。 参考:JConsole
MBeans Browser:JConsole里各种管理Bean。 参考:JConsole

学习技术不是用来写HelloWorld和Demo的,而是要用来解决线上系统的真实问题的.