标签: javaagents

使用-javaagent而不将包装代理放入jar中

是否可以在java -javaagent:myagent.jar some.package.Main没有将代理包装到罐子的情况下运行?就像是java agent.MyAgent some.package.Main

我有一个代理的源代码,并希望能够调试它,然后更改它,因此根本不需要使用它-javaagent,而是选择some.package.Main通过GUI执行.

BTrace能够使用PID连接到正在运行的进程或使用连接到进程-javaagent.我正在寻找类似于第一种方法(使用PID)的东西,但我也可以从头开始一个过程.

java debugging javaagents

5
推荐指数
1
解决办法
1819
查看次数

如何调试Java代理

目前可以使用代理运行JVM:

-javaagent:somejar.jar
Run Code Online (Sandbox Code Playgroud)

这种方式为了运行我写的Java代理,我必须将它放入jar中.因此它在调试方面受到限制.是否有一种在IDE中调试Java代理并将其附加到JVM的技术?

jvm jvm-arguments javaagents java-bytecode-asm

5
推荐指数
1
解决办法
2272
查看次数

使用maven exec插件传递命令行参数javaagent

我在Java中有一个缓存应用程序,我需要在缓存中放置不同大小的对象.问题是我真的不知道如何计算自定义对象的大小,我找到了解决方案 - 使用该库:http://mvnrepository.com/artifact/com.googlecode.sizeofag/sizeofag/ 1.0.0.要使用库运行程序,我需要指定命令行参数-javaagent.那么,如果我使用maven怎么办?


该计划很简单:

protected static Boolean b;
public static void main( String[] args )
{
    System.out.println(SizeOfAgent.sizeOf(b));
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

0
Can not access instrumentation environment.
Please check if jar file containing SizeOfAgent class is 
specified in the java's "-javaagent" command line argument.
Run Code Online (Sandbox Code Playgroud)


PS我知道,这样的问题已经存在,但它没有正确的答案.

java sizeof javaagents

4
推荐指数
1
解决办法
4215
查看次数

使用Java代理修改已加载的类?

目前我正在尝试修改驻留在JVM已经加载的类中的方法体.我知道JVM实际上不允许更改已经加载的类的定义.但是我的研究使我得到了像JRebel或Java Instrumentation API这样的实现,两者都使用了基于代理的方法.我知道如何在代表Javassist加载类之前做到这一点.但是考虑到在应用程序启动时加载类定义的EJB环境中的JRebel,不应该在加载JVM的类上进行字节码修改吗?

java bytecode javaagents jrebel

4
推荐指数
1
解决办法
2500
查看次数

如何检测自定义类加载器加载的类?

我试图修改几个类的字节码,这些类的打包 jar 文件不在类路径中 - 它们ClassLoader在运行时由自定义加载给定 URL。我试图使用java agentwithClassFileTransformer希望拦截这些类,但失败了。类加载器是遗留项目的一部分,因此我无法直接对其进行更改。

代理在 AppClassLoader “本地”加载的类上工作正常,但只是忽略自定义类加载器加载的类。

定义类加载器

    public class CustomClassLoader extends URLClassLoader {

    public CustomClassLoader(URL[] urls) {
        super(urls, CustomClassLoader.class.getClassLoader());
    }

    // violates parent-delegation pattern
    @Override
    protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
        synchronized (getClassLoadingLock(name)) {
            Class<?> clazz = findLoadedClass(name);
            if (clazz == null) {
                try {
                    clazz = findClass(name);
                } catch (ClassNotFoundException e) {
                }

                if (clazz == null) {
                    clazz = getParent().loadClass(name);
                }
            }
            if …
Run Code Online (Sandbox Code Playgroud)

java instrumentation classloader javaagents javassist

4
推荐指数
1
解决办法
2893
查看次数

java代理是否在单独的线程中运行?

我觉得这是我应该知道的,但是java代理(用-javaagent指定)是否在一个单独的线程中运行?我已经读过Java代理是一个可嵌入的库,它运行嵌入在JVM中并拦截了类加载过程,但我想确定:它是否真的拦截它们(这听起来像是在另一个线程中运行并监视类加载)或者它是否由JVM通知(JVM调用它来解析类加载;它没有单独的线程)?

再一次,我觉得我应该能够弄明白,但对我好,我工作太辛苦了,我的大脑有点油炸:P

谢谢!

java multithreading jvm javaagents

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

如何使用两个jar配置JVM Argument -javaagent

要使用spring AOP,我必须将-javaagent:C:/spring-agent-2.5.6.jar配置为JVM参数.但是有一个已经配置好的 jar,即-javaagent:C:/other.jar

现在我如何使用-javaagent配置两个罐子,以便两个罐子都能正常工作?

在Windows和Linux环境中,可能还有不同的方法可以使用-javaagent配置多个jar.请为两种环境建议解决方案.

java aop javaagents

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

直接在Maven Java项目中使用Jolokia JVM代理

我有一个简单的Java Maven项目,并希望使用Jolokia的JVM代理来获取JMX值.当我手动下载jolokia-jvm-1.1.5-agent.jar并添加java参数的绝对路径时,它可以工作-javaagent:/absolute/path/to/jolokia-jvm-1.1.5-agent.jar.

由于Jolokia下载页面还列出了maven依赖项(jolokia-core),我想知道是否可以直接将其包含在我的Maven构建中,而无需手动下载JVM代理程序?如何使用此javaagent运行我的程序?

java javaagents maven-3 maven jolokia

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

使用Java代理将类添加到类路径

我正在使用Java代理和Javassist为一些JDK类添加一些日志记录.本质上,当系统加载一些TLS类时,Javassist将为它们添加一些额外的字节码,以帮助我调试一些连接问题.

这是问题,因为这个类包含在代理jar中:

package com.something.myagent;
public class MyAgentPrinter {
    public static final void sayHello() {
        System.out.println("Hello!");
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的代理的转换方法中,假设我试图使用javassist调用该类:

// this is only called for sun.security.ssl.Handshaker
ClassPool cp = getClassPool(classfileBuffer, className);
CtClass cc = cp.get(className);
CtMethod declaredMethod = cc.getDeclaredMethod("calculateKeys");
declaredMethod.insertAfter("com.something.myagent.MyAgentPrinter.sayHello();");
cc.freeze();
return cc.toBytecode();
Run Code Online (Sandbox Code Playgroud)

你认为这会有效,但我得到了这个:

java.lang.NoClassDefFoundError: com/something/myagent/MyAgentPrinter
    at sun.security.ssl.Handshaker.printLogLine(Handshaker.java)
    at sun.security.ssl.Handshaker.calculateKeys(Handshaker.java:1160)
    at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:292)
Run Code Online (Sandbox Code Playgroud)

有没有办法将该类[ MyAgentPrinter] 添加到应用程序的类路径?

java bytecode classpath javaagents javassist

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

Java 代理库初始化失败:仪器

我正在开发一个名为“Cloudnet-v3”的开源项目。我在本地计算机上使用符号链接 /data 到 IntelliJProjects-Folder 中的数据点。

我得到以下启动命令:

[java, -XX:+UseG1GC, -XX:MaxGCPauseMillis=50, -XX:-UseAdaptiveSizePolicy, -XX:CompileThreshold=100, -XX:+UnlockExperimentalVMOptions, -XX:+UseCompressedOops, -Dcom.mojang.eula.agree=true, -Djline.terminal=jline.UnsupportedTerminal, -Dfile.encoding=UTF-8, -Dio.netty.noPreferDirect=true, -Dclient.encoding.override=UTF-8, -Dio.netty.maxDirectMemory=0, -Dio.netty.leakDetectionLevel=DISABLED, -Dio.netty.recycler.maxCapacity=0, -Dio.netty.recycler.maxCapacity.default=0, -DIReallyKnowWhatIAmDoingISwear=true, -Dcloudnet.wrapper.receivedMessages.language=english, -Xmx372M, -javaagent: "/data/temp/caches/wrapper.jar", -cp, "/data/launcher/libs/io/kubernetes/client-java/4.0.0/client-java-4.0.0.jar:/data/launcher/libs/io/netty/netty-codec-http/4.1.36.Final/netty-codec-http-4.1.36.Final.jar:/data/launcher/libs/io/netty/netty-handler/4.1.36.Final/netty-handler-4.1.36.Final.jar:/data/launcher/libs/io/netty/netty-transport-native-epoll/4.1.36.Final/netty-transport-native-epoll-4.1.36.Final-linux-x86_64.jar:/data/launcher/libs/io/netty/netty-transport-native-kqueue/4.1.36.Final/netty-transport-native-kqueue-4.1.36.Final-osx-x86_64.jar:/data/launcher/libs/io/kubernetes/client-java-api/4.0.0/client-java-api-4.0.0.jar:/data/launcher/libs/io/kubernetes/client-java-proto/4.0.0/client-java-proto-4.0.0.jar:/data/launcher/libs/org/yaml/snakeyaml/1.19/snakeyaml-1.19.jar:/data/launcher/libs/commons-codec/commons-codec/1.11/commons-codec-1.11.jar:/data/launcher/libs/org/apache/commons/commons-compress/1.18/commons-compress-1.18.jar:/data/launcher/libs/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar:/data/launcher/libs/com/squareup/okhttp/okhttp-ws/2.7.5/okhttp-ws-2.7.5.jar:/data/launcher/libs/com/google/guava/guava/25.1-jre/guava-25.1-jre.jar:/data/launcher/libs/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar:/data/launcher/libs/org/bouncycastle/bcprov-ext-jdk15on/1.59/bcprov-ext-jdk15on-1.59.jar:/data/launcher/libs/org/bouncycastle/bcpkix-jdk15on/1.59/bcpkix-jdk15on-1.59.jar:/data/launcher/libs/com/google/protobuf/protobuf-java/3.4.0/protobuf-java-3.4.0.jar:/data/launcher/libs/com/google/code/gson/gson/2.8.2/gson-2.8.2.jar:/data/launcher/libs/io/netty/netty-codec/4.1.36.Final/netty-codec-4.1.36.Final.jar:/data/launcher/libs/io/netty/netty-transport-native-unix-common/4.1.36.Final/netty-transport-native-unix-common-4.1.36.Final.jar:/data/launcher/libs/io/netty/netty-transport/4.1.36.Final/netty-transport-4.1.36.Final.jar:/data/launcher/libs/io/netty/netty-buffer/4.1.36.Final/netty-buffer-4.1.36.Final.jar:/data/launcher/libs/io/netty/netty-resolver/4.1.36.Final/netty-resolver-4.1.36.Final.jar:/data/launcher/libs/io/netty/netty-common/4.1.36.Final/netty-common-4.1.36.Final.jar:/data/launcher/libs/io/sundr/builder-annotations/0.9.2/builder-annotations-0.9.2.jar:/data/launcher/libs/io/swagger/swagger-annotations/1.5.12/swagger-annotations-1.5.12.jar:/data/launcher/libs/com/squareup/okhttp/logging-interceptor/2.7.5/logging-interceptor-2.7.5.jar:/data/launcher/libs/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar:/data/launcher/libs/joda-time/joda-time/2.9.3/joda-time-2.9.3.jar:/data/launcher/libs/org/joda/joda-convert/1.2/joda-convert-1.2.jar:/data/launcher/libs/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar:/data/launcher/libs/org/checkerframework/checker-qual/2.0.0/checker-qual-2.0.0.jar:/data/launcher/libs/com/google/errorprone/error_prone_annotations/2.1.3/error_prone_annotations-2.1.3.jar:/data/launcher/libs/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar:/data/launcher/libs/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar:/data/launcher/libs/org/bouncycastle/bcprov-jdk15on/1.59/bcprov-jdk15on-1.59.jar:/data/launcher/libs/io/sundr/sundr-core/0.9.2/sundr-core-0.9.2.jar:/data/launcher/libs/io/sundr/sundr-codegen/0.9.2/sundr-codegen-0.9.2.jar:/data/launcher/libs/io/sundr/resourcecify-annotations/0.9.2/resourcecify-annotations-0.9.2.jar:/data/launcher/libs/com/squareup/okio/okio/1.6.0/okio-1.6.0.jar:/data/launcher/versions/3.0.0-RELEASE-e48128a/driver.jar:/data/temp/caches/wrapper.jar", de.dytanic.cloudnet.wrapper.Main, nogui]
Run Code Online (Sandbox Code Playgroud)

我当前的工作目录是:/data/temp/services/Lobby-1#4a517311-09e6-4f77-89a5-64b4bc15399a

因此,每当我在工作目录中并执行给定的命令时,它都会失败并出现以下错误:Error opening zip file or JAR manifest missing : Error occurred during initialization of VM agent library failed to init: instrument 完整日志

现在我想知道,因为它在自动环境中工作,但主分支源没有更改,例如更改了 /data/launcher 的路径而不是启动器 ( System.getProperty("cloudnet.launcher.dir", "/data/launcher"))[ https://github.com/CloudNetService/CloudNet- v3/blob/master/cloudnet-launcher/src/main/java/de/dytanic/cloudnet/launcher/Constants.java]

简短的查找:ls -laR /Users/.../Documents/IdeaProjects/cloudnet-parent/data

java jvm javaagents

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