首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏清晨我上码

    JVMTI 和 Agent 实现(visual studio)

    通过 JavaVM,我们可以获得 JVMTI 的指针,并获得 JVMTI 函数的使用能力,所有的 JVMTI 函数都通过这个 jvmtiEnv 获取,不同的虚拟机实现提供的函数细节可能不一样,但是使用的方式是统一的 jvmtiEnv *jvmti; ... (*jvm)->GetEnv(jvm, &jvmti, JVMTI_VERSION_1_0); JVMTI的启动方式 JVMTI有两种启动方式,第一种是随java进程启动时,自动载入共享库。 = JNI_OK || jvmti == 0) { throw AgentException(JVMTI_ERROR_INTERNAL); } m_jvmti = jvmti ,后续再详解另一种方式以及更多jvmti相关操作

    3.3K10发布于 2020-01-15
  • 来自专栏CodeGuide | 程序员编码指南

    基于jvmti定位java异常信息

    JDPA 模块层次.png 模块 层次 编程语言 作用 JVMTI 底层 C 获取及控制当前虚拟机状态 JDWP 中介层 C 定义 JVMTI 和 JDI 交互的数据格式 JDI 高层 Java 提供 调用,然后将 JVMTI 函数的返回值封装成 JDWP 数据发还给后端。 \itstack-demo-jvmti-dll\cmake-build-debug\libitstack_demo_jvmti_dll.dll 代码示例 c++ 代码块: #include <iostream = nullptr; //初始化 vm->GetEnv(reinterpret_cast<void **>(&gb_jvmti), JVMTI_VERSION_1_0); // :10) 其他内容: 1、jvmti api 2、JPDA 体系概览

    1.3K10发布于 2020-07-14
  • 来自专栏微卡智享

    Android内存篇(一)---使用JVMTI监控应用

    JVMTI JVMTI 本质上是在JVM内部的许多事件进行了埋点,通过这些埋点可以给外部提供当前上下文的一些信息。 attachAgent开启JVMTI 代码attachAgent函数是初始化JVMTI的使用,在Android9.0中已将API添加到framework/base/core/java/android/ ; jint result = vm->GetEnv((void **) &jvmti_env, JVMTI_VERSION_1_2); if (result ! , JVMTI_EVENT_VM_OBJECT_ALLOC, nullptr); mJvmtiEnv->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_METHOD_ENTRY , JVMTI_EVENT_VM_OBJECT_ALLOC, NULL); mJvmtiEnv->SetEventNotificationMode(JVMTI_DISABLE, JVMTI_EVENT_METHOD_ENTRY

    3.1K40编辑于 2022-05-25
  • 来自专栏清晨我上码

    JVMTI第二种实现Agent方式

    /jvm/jvmti.h" #include <jvmti.h> #include <string> #include <cstring> #include <iostream> #include <list ; jint result = jvm->GetEnv((void**)&jvmti, JVMTI_VERSION_1_1); if (result ! = JNI_OK) { printf("ERROR: Unable to access JVMTI! \n"); } jvmtiError err = (jvmtiError)0; jclass* classes; jint count; err = jvmti \n"); } for (int i = 0; i < count; i++) { char* sig; jvmti->GetClassSignature

    1.4K20发布于 2020-02-13
  • 来自专栏微卡智享

    Android内存篇(二)---JVMTI在Anroid8.1下的使用

    前言 上一篇《Android内存篇(一)---使用JVMTI监控应用》中已经介绍了Android的JVMTI内存监控,文章最后我也提到了,虽然代码中anroid8.0通过反射开启JVMTI的监控,但是项目中的代码并不能用 首先建了一个Android8.1的虚拟机,然后我们直接在虚拟机上运行JVMTI的Demo。 , JVMTI_EVENT_VM_OBJECT_ALLOC, nullptr); mJvmtiEnv->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_METHOD_ENTRY " #include "MemoryFile.h" #define LOG_TAG "jvmti" #define ALOGV(...) , JVMTI_EVENT_VM_OBJECT_ALLOC, nullptr); mJvmtiEnv->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_METHOD_ENTRY

    87920编辑于 2022-05-25
  • 来自专栏Java架构师必看

    JRebel使用及JRebel-JVMTI Couldn‘t write to C:Users中文问题

    今天说一说JRebel使用及JRebel-JVMTI [FATAL] Couldn‘t write to C:\Users中文问题[通俗易懂],希望能够帮助大家进步!!! 生成的如下: http://jrebel.cicoding.cn/4B068EB5-0941-4645-1E98-FC077D530A61 image.png 用户名中文问题:JRebel-JVMTI

    2.8K20编辑于 2022-07-06
  • 来自专栏全栈程序员必看

    java学习——使用Eclipse进行单元测试,报错Can’t allocate jvmti memory

    并且控制台输出报错Can’t allocate jvmti memory 具体报错信息如下: FATAL ERROR in native method: JDWP Can't allocate jvmti memory, jvmtiError=JVMTI_ERROR_INVALID_ENVIRONMENT(116) JDWP exit error JVMTI_ERROR_WRONG_PHASE(112) /src/share/back/util.c:1265] JDWP exit error JVMTI_ERROR_INVALID_ENVIRONMENT(116): Can't allocate jvmti /src/share/back/util.c:1779] ERROR: JDWP unable to dispose of JVMTI environment: JVMTI_ERROR_INVALID_ENVIRONMENT (116) Can’t allocate jvmti memory : 无法分配jvmti内存 看这个错误就是和jvm有关系了,然后就考虑在要配置 jvm的参数!

    74710编辑于 2022-07-19
  • 来自专栏测试技术圈

    【文章】Java应用程序运行时监控方法之JVMTI的应用

    由于JVMTI 是一套Native接口,因此使用 JVMTI 需要我们使用C/C++ 操纵JNI。 ; return error; } error = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE, JVMTI_EVENT_METHOD_EXIT ; return error; } error = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE, JVMTI_EVENT_THREAD_END ); (*jvmti)->Deallocate(jvmti, (void *)info.name); } (*jvmti)->RawMonitorExit(jvmti ; return error; } error = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE, JVMTI_EVENT_VM_DEATH

    3.2K41发布于 2019-08-02
  • 来自专栏LieBrother

    线程最最基础的知识

    JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT + JVMTI_THREAD_STATE_SLEEPING, JVMTI_THREAD_STATE_IN_OBJECT_WAIT, IN_OBJECT_WAIT_TIMED = JVMTI_THREAD_STATE_ALIVE + // Object.wait + JVMTI_THREAD_STATE_IN_OBJECT_WAIT, PARKED = JVMTI_THREAD_STATE_ALIVE JVMTI_THREAD_STATE_WAITING_INDEFINITELY + JVMTI_THREAD_STATE_PARKED, JVMTI_THREAD_STATE_PARKED, BLOCKED_ON_MONITOR_ENTER = JVMTI_THREAD_STATE_ALIVE + // (re-)entering

    43620发布于 2019-09-17
  • 来自专栏CodeGuide | 程序员编码指南

    面经手册 · 第22篇《线程池的介绍和使用,以及基于jvmti设计非入侵监控》

    JVMTI」:JVMTI(JVM Tool Interface)位于jpda最底层,是Java虚拟机所提供的native编程接口。JVMTI可以提供性能分析、debug、内存管理、线程分析等功能。 // 注册事件监听(JVMTI_EVENT_VM_INIT、JVMTI_EVENT_EXCEPTION、JVMTI_EVENT_NATIVE_METHOD_BIND、JVMTI_EVENT_CLASS_FILE_LOAD_HOOK 、JVMTI_EVENT_METHOD_ENTRY、JVMTI_EVENT_METHOD_EXIT) error = gb_jvmti->SetEventNotificationMode(JVMTI_ENABLE , JVMTI_EVENT_VM_INIT, (jthread) NULL); error = gb_jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_EXCEPTION, (jthread) NULL); error = gb_jvmti->SetEventNotificationMode(JVMTI_ENABLE,

    68310发布于 2021-01-05
  • 来自专栏技术研发

    如何获取一个类的所有对象实例

    这个类可能是任何一个类,既不是单例,也不一定是由Spring管理,也不提供静态方法,有的时候还不能修改其代码,这里给大家介绍一种底层实现的方式,基于jvmti,代码用C++实现。 ;}JNIEXPORT jobjectArray JNICALL Java_com_liubs_findinstances_jvmti_InstancesOfClass_getInstances(JNIEnv * env, jclass clazz, jclass targetClazz) { JavaVM* vm; env->GetJavaVM(&vm); jvmtiEnv* jvmti; vm->GetEnv((void**)&jvmti, JVMTI_VERSION_1_0); jvmtiCapabilities capabilities = {0}; capabilities.can_tag_objects = 1; jvmti->AddCapabilities(&capabilities); jvmti->IterateOverInstancesOfClass(targetClazz, JVMTI_HEAP_OBJECT_EITHER

    3.1K20编辑于 2024-01-04
  • 来自专栏云原生可观测性

    破解 Java Agent 探针黑科技!

    javaagent Java Agent 所使用的 Instrumentation 依赖 JVMTI 实现,当然也可以绕过 Instrumentation 直接使用 JVMTI 实现 Agent。 如果想要深入了解 Java Agent,就得需要了解 JVMTI 以及 JVMTIAgent,下面分别介绍下: JVMTI JVMTI 是JVM Tool Interface 的缩写,是 JVM 暴露出来给用户扩展使用的接口集合 JVMTI 是一套本地代码接口,因此使用 JVMTI 需要我们与 C/C++ 以及 JNI 打交道。 事实上,开发时一般采用建立一个 Agent 的方式来使用 JVMTI,它使用 JVMTI 函数,设置一些回调函数,并从 Java 虚拟机中得到当前的运行态信息,并作出自己的判断,最后还可能操作虚拟机的运行态 它需要依赖 JVMTI 的 Attach API 机制实现。

    2.5K30发布于 2020-06-17
  • 来自专栏终码一生

    Debug 实现原理!看完还不懂吗?

    Debug Interface) 熟悉JVM的朋友可能听说过JVMPI和JVMDI,在JDK1.5他们统一被替换为JVMTIJVMTI 以前的文章里我们提到过Class的hotSwap,就是通过Instrument实现class的redefine和retransform。 而本质上JVMTI是一个programming interface,主要用在开发和监控上。而且它提供了接口去观察(inspect) 应用状态和控制应用的执行。 我们的debugger执行的操作发送到JDWP的实现上,然后再转给JVMTI来具体控制。 我们每次在IDE里进行代码调试时,实质上是通过IDE里的debugger这个界面执行GUI操作,然后通过JDI发送数据到JDWP,再经过JVMTI最终实现程序的高度。

    82020编辑于 2022-04-15
  • 来自专栏codelang

    JNI FindClass 遇到的 NoClassDefFoundError 错误

    在上次的隐私合规工具套装文章中,有人留言了 jvmti 也可以实现方法的监控,这几天尝试写了下 demo,从打印的日志上来看,确实是可行,但 MethodEntry 这个 callback,回调频率也太高了吧 java.lang.NoClassDefFoundError: Class not found using the boot class loader 从报错日志看,FindClass 的这个类在系统类加载器找不到,由于 jvmti not null":"null"); } 搜到另一位使用 jvmti 的博主遇到的问题,跟我遇到的一样: https://juejin.cn/post/7093858834476695588#heading -17[3] 然后我又去找了下几个 jvmti 的 demo,没有人这么玩,所以,只能自己硬着头皮继续查资料了。 jvmti demo 示例可查看 jvmticheck.cpp[4] 参考资料 [1] https://zhuanlan.zhihu.com/p/157890838: https://zhuanlan.zhihu.com

    1K21编辑于 2024-01-15
  • 来自专栏数据猿

    JVM CPU Profiler技术原理及源码深度解析

    在函数内部,我们可以通过JavaVM指针参数拿到JNI和JVMTI的函数指针表,这样我们就拥有了与JVM进行各种复杂交互的能力。 更多JVMTI相关的细节可以参考官方文档。 **)&jvmti, JVMTI_VERSION_1_0); // ... 按如上步骤即可实现基于JVMTI的CPU Profiler。 ->SetEventCallbacks(&callbacks, sizeof(callbacks)); jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_CLASS_LOAD , NULL); jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_CLASS_PREPARE, NULL); 3.

    1K21发布于 2019-10-15
  • 来自专栏JavaEdge

    Java面试快问快答-Instrument机制

    基于JVMTI代理程序; JVMTI:一套代理程序机制,为JVM相关工具提供的本地编程接口集合; JVMTI可以支持第三方工具程序以代理的方式连接和访问JVM,并利用JVMTI提供的丰富的编程接口, 在JVM启动时,通过JVM参数-javaagent,传入agent jar,Instrument Agent被加载; 在Instrument Agent 初始化时,注册了JVMTI初始化函数eventHandlerVMinit Premain-Class指定类的premain方法; 初始化函数eventHandlerVMinit,注册了class解析的ClassFileLoadHook函数; 在解析Class之前,JVM调用JVMTI

    88330发布于 2020-05-26
  • 来自专栏腾讯云中间件的专栏

    预告|ArchSummit 全球架构师峰会杭州站即将盛大开幕

    腾讯云中间件专家工程师童子龙将在本次大会的《中间件开发实战》专场为大家分享精彩议题——《JVMTI Agent 在中间件领域的应用》。 议题介绍 讲师介绍 童子龙:腾讯云中间件专家工程师 议题主题 JVMTI Agent 在中间件领域的应用 议题简介 中间件是介于应用和数据或者基础设施之间的一层能力组件,现在企业技术栈纷繁复杂,中间件涉及范围十分广泛 在众多语言中,Java 在中间件领域的生态发展一骑绝尘,JVMTI Agent基于 Java 原生技术,在中间件领域的应用越越来越广泛,从 CPU 性能的 Profile 监控,到 APM 的探针,到 议题大纲 从字节码到 JVMTI Agent 原理介绍 Agent 在性能监控领域的应用 Agent 在 Service Mesh ProxyLess 领域的应用 Agent 开发的最佳实践 听众收益 了解 JVMTI Agent 的技术原理和价值 了解 Agent 的开发实战经验 专场议程概览 ArchSummit 全球架构师峰会开幕倒计时 5 天。

    1.1K20编辑于 2022-09-22
  • 来自专栏IT技术精选文摘

    Java Instrument 功能使用及原理

    1 基本功能和用法 JVMTI(Java Virtual Machine Tool Interface)是一套由 Java 虚拟机提供的,为 JVM 相关的工具提供的本地编程接口集合。 JVMTI 是从 Java SE 5 开始引入,整合和取代了以前使用的 Java Virtual Machine Profiler Interface (JVMPI) 和 the Java Virtual JVMTI 提供了一套”代理”程序机制,可以支持第三方工具程序以代理的方式连接和访问 JVM,并利用 JVMTI 提供的丰富的编程接口,完成很多跟 JVM 相关的功能。 事实上,java.lang.instrument 包的实现,也就是基于这种机制的:在 Instrumentation 的实现当中,存在一个 JVMTI 的代理程序,通过调用 JVMTI 当中 Java 除开 Instrumentation 功能外,JVMTI 还在虚拟机内存管理,线程控制,方法和变量操作等等方面提供了大量有价值的函数。

    2.5K41发布于 2018-05-30
  • 来自专栏技术栈

    Java Agent入门实战(一)-Instrumentation介绍与使用

    ---- java.lang.instrument包的具体实现,依赖于 JVMTI(Java Virtual Machine Tool Interface)这是一套由 Java 虚拟机提供的,为 JVM JVMTI 是从 Java SE 5 开始引入,JVMTI 提供了一套“代理”程序机制,可以支持第三方工具程序以代理的方式连接和访问 JVM,并利用 JVMTI 提供的编程接口,完成很多跟 JVM 相关的功能 事实上,java.lang.instrument 包的实现,也就是基于这种机制的 在 Instrumentation 的实现当中,存在一个 JVMTI 的代理程序,通过调用 JVMTI 当中与Java 除了 Instrumentation 功能外,JVMTI 还在虚拟机内存管理,线程控制,方法和变量操作等等方面提供了大量可用的函数。 关于 JVMTI 的详细信息,可以参考 Java SE 6 JVM TI文档 Java Instrumentation 的基本用法 在java中如何实现 Instrumentation 呢,简单来说有以下几步

    5K61发布于 2020-02-10
  • 来自专栏微服务生态

    java instrument agent 原理小结

    classes:lib/byte-buddy-1.4.16.jar -javaagent:test-1.0-SNAPSHOT.jar com.test.domain.AgentEntity 名词解释 JVMTI JVMTI是基于事件驱动的,JVM每执行到一定的逻辑就会调用一些事件的回调接口(如果有的话),这些接口可以供开发者扩展自己的逻辑。

    39830发布于 2018-08-22
领券