JVM性能调优监控工具 - jdb

jdb

server:

    - JDK 9 or later:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
    - JDK 5 - 8:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
    - JDK 1.4.x:-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
    - JDK 1.3.x or earlier:-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

client:

jdb <options> <class> <arguments>

[options]
-help                   -- 打印辅助信息并退出
-sourcepath <directories separated by ";">
                        -- 要在其中查找源文件的目录
-attach <address>       -- 使用标准连接器附加到指定地址处正在运行的VM
-listen <address>       -- 等待正在运行的VM使用标准连接器在指定地址处连接
-listenany              -- 等待正在运行的VM使用标准连接器在任何可用地址处连接
-launch                 -- 立即启动VM而不是等待'run'命令
-listconnectors         -- 列出此VM中的可用连接器
-connect <connector-name>:<name1>=<value1>,... 
                        -- 使用所列参数值通过指定的连接器连接到目标VM
-dbgtrace [flags]       -- 输出信息供调试jdb
-tclient                -- 在HotSpot(TM)客户机编译器中运行应用程序
-tserver                -- 在HotSpot(TM)服务器编译器中运行应用程序

转发到被调试进程的选项:
-v -verbose[:class|gc|jni]
                        -- 启用详细模式
-D<name>=<value>        -- 设置系统属性
-classpath <directories separated by ";">
                        -- 列出要在其中查找类的目录
-X<option>              -- 非标准目标VM选项

-------------------
connectors              -- 列出此VM中可用的连接器和传输
run [class [args]]      -- 开始执行应用程序的主类
threads [threadgroup]   -- 列出线程
thread <thread id>      -- 设置默认线程
suspend [thread id(s)]  -- 挂起线程(默认值:all)
resume [thread id(s)]   -- 恢复线程(默认值:all)
where [<thread id> | all] 
                        -- dump线程的堆栈
wherei [<thread id> | all]
                        -- dump线程的堆栈,以及pc信息
up [n frames]           -- 上移线程的堆栈
down [n frames]         -- 下移线程的堆栈
kill <thread id> <expr> -- 终止具有给定的异常错误对象的线程
interrupt <thread id>   -- 中断线程
print <expr>            -- 输出表达式的值
dump <expr>             -- 输出所有对象信息
eval <expr>             -- 对表达式求值(与print相同)
set <lvalue> = <expr>   -- 想字段/变量/数组元素分配新值
locals                  -- 输出当前堆栈帧中的所有本地变量
classes                 -- 列出当前已知的类
class <class id>        -- 显示已命名类的详细资料
methods <class id>      -- 列出类的方法
fields <class id>       -- 列出类的字段
threadgroups            -- 列出线程组
threadgroup <name>      -- 设置当前线程组
stop in <class id>.<method>[(argument type,...)]
                        -- 在方法中设置断点
stop in <class id>:<line>
                        -- 在行中设置断点
clear <class id>.<method>[(argument type,...)] 
                        -- 清除方法中的断点
clear <class id>:<line> -- 清除行中的断点
clear                   -- 列出断点
catch [uncaught|caught|all] <class id>|<class pattern>
                        -- 出现指定的异常错误时中断
ignore [uncaught|caught|all] <class id>|<class pattern>
                        -- 对于指定的异常错误,取消'catch'
watch [access|all] <class id>.<field name>
                        -- 监视对字段的访问/修改
unwatch [access|all] <class id>.<field name>
                        -- 停止监视对字段的访问/修改
trace [go] methods [thread]
                        -- 跟踪方法进入和退出,除非指定'go',否则挂起所有线程
untrace [methods]       -- 停止跟踪方法进入和/或退出
step                    -- 执行当前行
step up                 -- 一直执行,知道当前方法返回到其调用方
stepi                   -- 执行当前指令,下一步,步进一行(步过调用)
cont                    -- 从断点出继续执行
list [line number|method]
                        -- 输出源代码
use (或 sourcepath) [source file path]
                        -- 显示或更改源路径
exclude [<class pattern>, ... | "none"]
                        -- 对于指定的类,不报告步骤或方法时间
classpath               -- 从目标VM输出类路径信息
monitor <command>       -- 每次程序停止时执行命令
monitor                 -- 列出监视器
unmonitor <monitor#>    -- 删除监视器
read <filename>         --读取并执行命令文件
lock <expr>             -- 输出对象的锁信息
threadlocks [thread id] -- 输出线程的锁信息
pop                     -- 通过当前帧出栈,且包含当前帧
reenter                 -- 与pop相同,但重新进入当前帧
redefine <class id> <class file name>
                        -- 重新定义类的代码
disablegc <expr>        -- 禁止对象的垃圾收集
enablegc <expr>         -- 允许对象的垃圾收集
!!                      -- 重复执行最后一个命令
<n> <command>           -- 将命令重复执行n次
# <command>             -- 放弃(无操作)
help (或 ?)             -- 列出命令
version                 -- 输出版本信息
exit (或quit)           -- 退出调试器

<class id>:带有程序包限定符的完整类名
<class pattern>:带有前导或尾随通配符('*')的类名
<thread id>:'threads'命令中报告的线程编号
<expr>:Java(TM)编程语言表达式。支持大多数常见语法。

可以将启动命令置于"jdb.ini"或".jdbrc"中
位于user.home或user.dir中
jdb -attach 5005

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr011.html
https://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jdb.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值