标签: javaagents

如何使用多个Java代理启动Java程序?

我知道如何使用java代理启动java程序:

java -javaagent:myAgent.jar MyJavaProgram
Run Code Online (Sandbox Code Playgroud)

但是,如果我想添加2个或更多java代理程序来检测我的程序呢?我不想重新调用java -javaagent:...我必须在JVM中加载每个代理.

我尝试过这样的事情:

java -javaagent:agentA.jar, agentB.jar MyJavaProgram
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

java -javaagent:agentA.jar agentB.jar MyJavaProgram
Run Code Online (Sandbox Code Playgroud)

但没有成功.

有没有解决我的问题的答案?

谢谢.

jvm javaagents

75
推荐指数
2
解决办法
4万
查看次数

关于javaagents的教程

我想学习一些关于javaagents的东西,但研究并不容易.大多数结果指的是JADE.我知道java代理可能意味着两件事:

  1. 用Java编程的代理是分布式系统的代理概念的化身.
  2. 用于增强JVM工作的低级软件组件,例如分析器,代码覆盖工具等

我在这里找到了类似的问题,但不幸的是它也提到了版本1.

你知道任何文章,初学者的教程,关于版本2中javaagent的示例项目吗?我在这里找到了一个,但我正在寻找更多.

java javaagents

52
推荐指数
2
解决办法
6万
查看次数

程序启动后启动Java代理程序

是否可以在虚拟机启动后从同一个VM中插入javaagent?

让我们说例如我们在jar myagent.jar中有一个代理,它具有适当的元数据设置和已经实现的agentmain方法.现在,用户程序调用API调用,该调用应该导致代理插入,以便它可以重新定义类.

可以这样做吗?

java javaagents

25
推荐指数
3
解决办法
2万
查看次数

如何在不停止JVM的情况下将Javaagent添加到JVM?

我希望在不停止应用程序的情况下分析Java应用程序.我可以在应用程序运行时以某种方式添加Javaagent吗?

java jvm javaagents

21
推荐指数
3
解决办法
1万
查看次数

Cassandra:指定的堆栈大小太小,指定至少228k

cassandra升级后启动时出现此错误.任何的想法?

# cassandra -f

xss =  -ea -javaagent:/usr/share/cassandra/lib/jamm-0.2.5.jar -XX:+UseThreadPriorities 
-XX:ThreadPriorityPolicy=42 -Xms1920M -Xmx1920M -Xmn200M -XX:+HeapDumpOnOutOfMemoryError -Xss180k

The stack size specified is too small, Specify at least 228k
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)

stack jvm javaagents cassandra ubuntu-14.04

16
推荐指数
1
解决办法
1万
查看次数

使用Maven exec插件指定javaagent参数

我有一个类似的问题:前一个问题

我正在使用Netbeans将Java项目转换为Maven.为了启动程序,我们需要的命令行参数之一是-javaagent设置.例如

-javaagent:lib/eclipselink.jar
Run Code Online (Sandbox Code Playgroud)

我正在尝试让Netbeans启动应用程序以供开发使用(我们将编写自定义启动脚本以进行最终部署)

由于我使用Maven来管理Eclipselink依赖项,我可能不知道Eclipselink jar文件的确切文件名.它可能类似于eclipselink-2.1.1.jar,它基于我在pom.xml文件中配置的版本.

如何配置exec-maven-plugin将精确的eclipselink文件名传递给命令行参数?

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <configuration>
       <executable>java</executable>
           <arguments>
               <argument>-Xmx1000m</argument>
               <argument>-javaagent:lib/eclipselink.jar</argument> <==== HELP?
               <argument>-classpath</argument>
               <classpath/>
               <argument>my.App</argument>
           </arguments>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

javaagents maven

14
推荐指数
1
解决办法
2万
查看次数

C++跳转到其他方法执行

在我的C++ JNI-Agent项目中,我正在实现一个函数,该函数将被赋予可变数量的参数并将执行传递给另一个函数:

// address of theOriginalFunction
public static void* originalfunc;

void* interceptor(JNIEnv *env, jclass clazz, ...){

    // add 4 to the function address to skip "push ebp / mov ebp esp"
    asm volatile("jmp *%0;"::"r" (originalfunc+4));

    // will not get here anyway
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

上面的函数只需要跳转到:

JNIEXPORT void JNICALL Java_main_Main_theOriginalFunction(JNIEnv *env, jclass clazz, jboolean p1, jbyte p2, jshort p3, jint p4, jlong p5, jfloat p6, jdouble p7, jintArray p8, jbyteArray p9){
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,原始函数可以正确读取所有参数(使用包括数组在内的9种不同类型的参数进行测试).

但是,在从拦截器跳入原始函数之前,我需要做一些计算.但是,在这里我观察到有趣的行为.

void* interceptor(JNIEnv *env, jclass …
Run Code Online (Sandbox Code Playgroud)

c++ java-native-interface stack javaagents

14
推荐指数
1
解决办法
903
查看次数

在Java代理中重定位AspectJ包

我正在使用AspectJ来监视字段访问和字段修改.我有一个gradle项目,它编译了两个方面,并使用gradle shadow插件将jar与aspectjrt和aspectjweaver打包在一个带阴影的jar中.代理仍然是org.aspectj.weaver.loadtime.Agent.一切正常,但当我尝试重新定位aspectj包时,我得到一个错误.

shadow插件配置是:

shadowJar {
    relocate 'org.aspectj', 'shadow.org.aspectj'
    relocate 'aj.org.objectweb.asm', 'shadow.aj.org.objectweb.asm'
}
Run Code Online (Sandbox Code Playgroud)

清单:

jar {
    manifest {
        attributes("Premain-Class": "shadow.org.aspectj.weaver.loadtime.Agent",
                "Can-Redefine-Classes": true,
                "Can-Retransform-Classes":true)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是反编译的方面类,所以看起来是正确的:

package com.vfunction.singletonanalysis;

import shadow.org.aspectj.lang.JoinPoint;
import shadow.org.aspectj.lang.NoAspectBoundException;
import shadow.org.aspectj.lang.annotation.Aspect;
import shadow.org.aspectj.lang.annotation.Before;

@Aspect
public class StaticFieldBeforeAccessAspect extends AbstractFieldAccessAspect {
    public StaticFieldBeforeAccessAspect() {
    }

    @Before("callAt()")
    public void before(JoinPoint joinPoint) throws Throwable {
        this.printJoinPoint(joinPoint);
    }

    public static StaticFieldBeforeAccessAspect aspectOf() {
        if (ajc$perSingletonInstance == null) {
            throw new NoAspectBoundException("com.vfunction.singletonanalysis.StaticFieldBeforeAccessAspect", ajc$initFailureCause);
        } else {
            return ajc$perSingletonInstance;
        }
    }

    public static boolean …
Run Code Online (Sandbox Code Playgroud)

java aspectj javaagents

13
推荐指数
1
解决办法
455
查看次数

javaagent中redefine和retransform之间的区别

使用自定义Java代理打包jar文件时,可以添加以下属性:

  • Can-Redefine-Classes
  • Can-Retransform-Classes

这两者有什么区别?

如果重新定义发生在类加载和重新转换之后,那么何时发生了完全重新转换?

java javaagents

12
推荐指数
2
解决办法
3200
查看次数

如何将参数传递给Java检测代理?

如何将参数传递给java.lang.instrument检测代理?文档简单地说明:

-javaagent:jarpath [=选项]

我可以选择哪些选项

java instrumentation arguments javaagents

11
推荐指数
1
解决办法
7152
查看次数