首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在应用程序退出时正常关闭javaagent

在应用程序退出时正常关闭javaagent
EN

Stack Overflow用户
提问于 2019-01-31 13:29:04
回答 1查看 310关注 0票数 0

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

如何配置我的代理,使其在应用程序关闭时执行一些清理,然后代理退出?我看过关闭钩子,但它们需要访问main方法,而我没有这个方法。

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

代码语言:javascript
运行
复制
    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伙伴来转换主类,但是你能通过它添加一个关闭钩子吗?还有没有别的办法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-31 13:34:13

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54453880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档