gpt4 book ai didi

java - 应用程序退出时优雅地关闭 javaagent

转载 作者:行者123 更新时间:2023-12-02 10:19:17 24 4
gpt4 key购买 nike

我正在编写一个 javaagent 来监视应用程序。它启动服务器并显示计算的指标。

如何配置我的代理,以便每当应用程序关闭时,都会执行一些清理操作,然后代理退出?我研究过关闭 Hook ,但它们需要访问我没有的 main 方法。

这是我的 premain 方法。我使用 Prometheus 的 Java 库来生成指标,并使用 jetty 作为服务器本身。

    Server server = new Server(1234);
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
server.setHandler(context);
// Expose Promtheus metrics.
context.addServlet(new ServletHolder(new MetricsServlet()), "/");
// Add metrics about CPU, JVM memory etc.
DefaultExports.initialize();


// Start the webserver.
server.start();
server.join();

当应用程序退出时,JVM 不会退出,因为我的代理正在阻止它。我正在从服务器生成日志,并且希望保存我拥有的所有数据并退出,而不是阻止 JVM。我也看过byte buddy来改造主类,但是你能通过它添加一个关闭钩子(Hook)吗?还有其他办法吗?

最佳答案

这是因为 javaagent 中使用的线程不是守护线程。将它们更改为 setDaemon(true);

关于java - 应用程序退出时优雅地关闭 javaagent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54453880/

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