Skip to content
chenjw edited this page Mar 4, 2020 · 36 revisions

Home

简介

Knife是一个Java应用的运行时命令行诊断工具。 有点像Btrace. 提供了很多Btrace没有提供的功能.

功能

与Btrace类似的功能:

  1. 支持在运行时被加载到jvm中,不需要目前应用做任何修改.
  2. 可以跟踪一个方法调用,并打印出入参、返回结果和调用时间等信息.

Btrace所没有提供的功能:

  1. 命令行的交互方式,不需要编写脚本.
  2. 可以遍历堆内存,找到目标对象.
  3. 可以查看并修改某个对象的属性值.
  4. 可以主动调用某个方法,并可以跟踪调用的返回结果和调用时间等信息.
  5. 可以查找某个对象引用的所有对象或引用某个对象的所有对象.

下载

https://sourceforge.net/projects/knife-download/files/

如何使用Knife?

  1. 下载 knife-XXX.tar.gz
  2. 解压缩“tar -zxvf knife-XXX.tar.gz”
  3. 执行knife.sh

本地attach和远程attach

连接到本地运行的Jvm或远程的Jvm

连接到本地运行的Jvm或远程Jvm

连接成功

安全性

native代码bug(如内存越界)问题引起crash。

native代码单元测试保证,覆盖大多数分支。

native代码泄漏,如申请的内存没有释放。

??

agent加载的class或引用的对象没有释放。

最小agent,classloader隔离,自检测。

端口号释放

心跳,自动终止socket连接。

Clone this wiki locally