gpt4 book ai didi

java - 监控负载较重的 Java 应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:49 25 4
gpt4 key购买 nike

我想知道获取应用程序性能指标(最好是 Java )的标准做法是什么。目前我们有一个定期计划的任务来收集系统指标。通常,此任务未按时安排,导致该时间无法使用指标,从而导致监控仪表板损坏[如果是折线图,则会出现间隙]。

通常,当应用程序性能不佳时,我们希望所有指标都可用。但我们发现,在这些时候我们无法收集任何指标[因为应用程序非常繁忙]

最佳答案

  1. 您可以使用名为 top-threads 的工具,可在此处找到:https://bitbucket.org/pjtr/topthreads

    它的作用是为您提供您所请求的有关目标 JVM 加载的每个类和线程的每个使用详细信息(RAM、CPU 等)。

    其用法可在上面的页面上找到

  2. 您可以使用位于 java lib 目录中 Tools.jar 文件中的 Sun 库将代理加载到目标 VM 中。

加载代理如下所示:

/**
* Hooks/Attaches to the process's VM with a given PID
*
* @return true if the hook/attach was successful
*/
public boolean hook() {
try {
return (vm = VirtualMachine.attach(Long.toString(pid))) != null;
} catch (AttachNotSupportedException | IOException e) {
e.printStackTrace();
return false;
}
}

/**
* Loads a thread agent which can debug the running threads and classes of this process
* @param agent - the location of the agent jar file
* @param options - the options/arguments to pass into the agents main method
*/
public boolean loadAgent(String agent, String options) {
try {
vm.loadAgent(agent, options);
return true;
} catch (AgentLoadException | AgentInitializationException | IOException e) {
e.printStackTrace();
return false;
}
}

代理主类看起来像这样......

另外,请注意:创建代理 jar 时,必须在 list 文件中指定 Agent-main 以及包含要加载代理的 agentmain 方法的类的位置。

public class Agent {
/**
* An Object Lock for thread sync's if neccessary */
public static final Object LOCK = new Object();

/**
* Starts the agent with this agent main
*
* @param agentArgs
* - the agent args being passed into this method
* @param inst
* - the instrumentation instrument that is passed into this
* method
*/
public static void agentmain(String agentArgs, Instrumentation inst) {
//Do whatever you want to the target VM here, hacky, but eh, use at your own risk, it is included in java itself...
}
}

代理 list 文件的描述

Manifest-Version: 1.0
Agent-Class: packageNameThatWillBeDifferent.Agent
Created-By: 1.8.0_101 (Oracle Corporation)

关于java - 监控负载较重的 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48531331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com