【问题标题】:monitoring threadpool status in external library监控外部库中的线程池状态
【发布时间】:2019-03-19 19:47:35
【问题描述】:

我想在java环境中监控一个外部库中使用的线程池。

可以在我自己的代码中定义的 ExecuterService 等池对象上添加监控逻辑。 但很多情况下,库中声明的池是被封装的,所以用户无法访问。 我需要不断检查库池消耗的资源,以使我的程序稳定。

我要监控的功能是池的名称、大小、当前使用情况,例如活动线程数等。

谢谢。

【问题讨论】:

  • 您是否查看过ExecutorService 的实现类,例如ThreadPoolExecutor?您想监控哪些信息是使用此类的 getter 无法获得的?
  • @ErwinBolwidt 感谢您的回复。当执行器对象可访问时,我可以通过调用 ThreadPoolExecutor 的 getter 方法来获取信息。但是我问的是对象不可访问的情况,因为外部库声明它封装了它,而不是在库之外显示。

标签: java jvm threadpool monitoring


【解决方案1】:

您可以做的是创建一个自定义线程组,并为您的线程设置此默认线程组。自定义线程组的优点是在创建或销毁线程时会收到通知,并且您可以获得创建线程的库的堆栈跟踪。

要直接监控 ThreadPoolExecutor,您需要修改这个类或使用插桩将代码注入其中。

将代码注入库可能更容易,例如通过反编译创建池的类并对其进行修改。

另一种选择是可以通过反射获得 ExecutorService。

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多