标签: javaagents

将-javaagent添加到Tomcat 6服务器,我在哪里放置它以什么格式?

我正在尝试安装一个可以监视J2EE Web事务的应用程序运行状况监视应用程序,我需要以某种方式将一个javaagent放入我的Tomcat,但我不知道如何执行此操作,我正在使用Linux并且已经受到软件的指示使该产品做以下事情的公司:

-javaagent:<Path to the WebTransactionAgent.jar>
Run Code Online (Sandbox Code Playgroud)

我得到了他们的进一步支持,他们基本上说要把它放到适当的.sh文件中(但是他们无法告诉我哪个文件适用于Tomcat)

我尝试将它放在catalina.sh文件中,但它似乎不起作用:

JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -XX:MaxPermSize=256m -javaagent:"C:\WebTransactionAgent.jar"
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏

java tomcat javaagents catalina

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

如何在类路径中放置javaagent的类

我正在尝试开发一个javaagent,它可以在asm-4的帮助下编写代码.现在我遇到了一个非常基本的问题,javaagent的类加载器没有看到asm依赖,因此失败了.我是否必须提供一个jar-with-dependencies(又名maven build plugin),它包含代理所需的所有类,或者是否有另一种方法将类添加到java代理?直接在类路径中引用jar asm-all.jar没有帮助.构建jar-with-dependencies最初没有帮助,因为无法使用程序集插件设置Premain-Class属性.感谢帮助;-)

java classpath javaagents maven

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

如何将 Java 代理与本机编译的 Spring Boot 应用程序一起使用

与 SpringBoot (3.0.3) 应用程序一起,我们使用 Application Insights (Azure) 进行监控。

目前我们正在尝试使用 GraalVM 本地编译应用程序。这工作得很好,给我们带来了很多好处(启动时间和内存消耗)。唯一还不能工作的是作为 Java 代理启动的 Application Insights。我几乎没有找到关于整个主题的有用信息,并问自己我们是否正在尝试做一些目前根本不支持的事情。

这是我们迄今为止所做的尝试:

是否有解决方案可以在本机编译版本中添加 javaagents,或者是否有任何替代方案可以将监控数据从 SpringBoot 应用程序发送到 ApplicationInsights?

java javaagents spring-boot azure-application-insights graalvm-native-image

9
推荐指数
1
解决办法
1417
查看次数

JVM可以检索已通过attach api加载到其中的代理列表吗?

是否有可能通过Java 1.6 attach api获取加载到当前JVM中的代理列表?如果是这样的话?

在启动时加载的代理可以通过RuntimeMXBean确定,但我找不到一种方法来处理启动后添加的代理.

java jvm javaagents

8
推荐指数
1
解决办法
538
查看次数

VirtualMachine.attach(pid) 因 java.io.IOException 失败:无法附加到当前 VM

在经历了这个讨论之后,我相信附加到同一个 VM 的选项,默认情况下在 OpenJDK11 中已被禁用。

我正在尝试将 Java 代理升级到 OpenJDK11,在VirtualMachine.attach(pid)调用测试用例期间,我看到它失败并出现以下错误。处理这种情况的正确方法是什么?

完整的堆栈跟踪:

java.io.IOException: Can not attach to current VM

at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.<init>(HotSpotVirtualMachine.java:75)
at jdk.attach/sun.tools.attach.VirtualMachineImpl.<init>(VirtualMachineImpl.java:48)
at jdk.attach/sun.tools.attach.AttachProviderImpl.attachVirtualMachine(AttachProviderImpl.java:69)
at jdk.attach/com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:207)
at org.kantega.notsoserial.WithAgentIT.attachAgent(WithAgentIT.java:76)
at org.kantega.notsoserial.WithAgentIT.attackShouldBePreventedWithAgent(WithAgentIT.java:47)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Run Code Online (Sandbox Code Playgroud)

java javaagents java-11

8
推荐指数
2
解决办法
6518
查看次数

在java检测中使用agentmain方法有什么用处

我用-javaagent参数和premain方法做了一些java字节码检测.但这是我第一次听到agentmain方法.我对这个方法有一些疑问.接下来是这样的.

premain和agentmain方法有相同的用途吗?
调用agentmain方法时?
在java检测中使用agentmain方法有什么用?

instrumentation profiling bytecode javaagents

7
推荐指数
1
解决办法
4233
查看次数

Java - 将java代理注入到运行jvm中

基本上,我正在尝试编写一些列出JVM加载的每个类的东西.我写的是有效的,但它只适用于它运行的jvm.我精心设计了一个java代理来动态注入另一个JVM,但后来意识到我实际上并不知道如何注入它.我如何实际将此代理发送到另一个JVM?可能吗?

java jvm classloader javaagents

7
推荐指数
4
解决办法
6362
查看次数

转换类无效

根据本教程,我尝试使Java代理正常工作。 https://www.baeldung.com/java-instrumentation#loading-a-java-agent

我知道[Agent] Transforming class TestApplication 我没有错误,但是看不到转换类的任何效果。

最终,我希望同时使静态负载和动态负载都能工作,但现在我主要关注静态方式。


public class Static_Agent {

    public static void premain(String agentArgs, Instrumentation inst) {
        String[] tokens = agentArgs.split(";");
        String className = tokens[0];
        String methodName = tokens[1];

        System.out.println(">> "+className);
        System.out.println(">> "+methodName);
        transformClass(className, methodName, inst);
    }



    public static void transformClass(String className, String methodName, Instrumentation instrumentation) {
        Class<?> targetCls = null;
        ClassLoader targetClassLoader = null;
        // see if we can get the class using forName
        try {
            targetCls = Class.forName(className);
            targetClassLoader = targetCls.getClassLoader();
            transform(targetCls, methodName, targetClassLoader, …
Run Code Online (Sandbox Code Playgroud)

java agent javaagents javassist java-attach-api

7
推荐指数
1
解决办法
167
查看次数

远程调试javaagent jar文件

我创建了一个 javaagent jar 文件并将其附加到一个 web 应用程序(通过-javaagent在 web 应用程序启动时使用关键字)。我怎样才能用 eclipse 远程调试这个 javaagent

debugging instrumentation javaagents

6
推荐指数
1
解决办法
981
查看次数

如何在所有 JUnit 测试中集成 Spring Instrument javaagent

我正在为一个大型项目编写单元测试,我需要将 JVM 参数传递给它,这些是我的 JVM 参数内置到该项目的 Eclipse 运行配置中:

--module-path lib/javafx-sdk-13.0.2/lib --add-modules=javafx.controls
-javaagent:lib/aspectjweaver-1.9.5.jar 
-javaagent:lib/spring-instrument-5.2.3.RELEASE.jar
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要为每个 JUnit 测试或测试序列添加这些参数。有没有更好的方法呢?无需手动将这些参数添加到我创建的每个新测试中的某种方法?

******编辑******

这也有一个令人讨厌的副作用,即根本不让我构建这个项目!Maven 不使用我的自定义 JUnit 运行配置来运行应用程序的整个测试集(这很好用,因为我在那里设置了 JVM 参数),而是使用它自己的,因为参数不存在,这显然失败了。这是一个大问题,有没有办法以某种方式将这些 JVM 参数直接“硬编码”到 POM 中?

****** 编辑 2 ******

这是我的 POM.xml 文件中的 Spring-Boot-Maven-Plugin 配置:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <jvmArguments>
            --module-path lib/javafx-sdk-13.0.2/lib 
            --add-modules=javafx.controls
            -javaagent:lib/aspectjweaver-1.9.5.jar 
            -javaagent:lib/spring-instrument-5.2.3.RELEASE.jar
        </jvmArguments>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

******解决方案******

添加 Maven Surefire 插件并以这种方式设置它解决了这个问题:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>test</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <argLine>
                    --module-path lib/javafx-sdk-13.0.2/lib 
                    --add-modules=javafx.controls
                    -javaagent:lib/aspectjweaver-1.9.5.jar 
                    -javaagent:lib/spring-instrument-5.2.3.RELEASE.jar
                </argLine>
            </configuration>
          </plugin> …
Run Code Online (Sandbox Code Playgroud)

java junit spring javaagents

6
推荐指数
1
解决办法
840
查看次数