有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当应用程序退出时,java会优雅地关闭javaagent

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

如何配置代理,以便在应用程序关闭时执行一些清理,代理退出?我已经研究了关闭挂钩,但是它们需要访问我没有的主方法

这是我的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来转换主类,但是您可以通过它添加一个关闭钩子吗?还有别的办法吗


共 (1) 个答案

  1. # 1 楼答案

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