如何通过jmx在运行时修改ThreadPoolTask​​Executor

2024-01-22

我在通过 JConsole 修改 MBean 属性时遇到问题。我有一个 Threading bean,它通过以下方式调用:

public static void main(String[] args) throws Exception {
    // JMX
    new SimpleJmxAgent();

    // spring executor context
    ApplicationContext ctx = new FileSystemXmlApplicationContext(
            "src/resources/ThreadContent.xml");

    startThreads(ctx);
}

private static void startThreads(ApplicationContext ctx) {

    TaskExecutor tE = (TaskExecutor) ctx.getBean("TaskExecutor");

    System.out.println("Starting threads");

    for (int i = 0; i < 10; i++) {
        tE.execute(new RepeatingGrpPoC());
    }

ThreadContent.xml 包含所有默认属性值。

SimpleJmxAgent 看起来像:

public SimpleJmxAgent() {

    mbs = ManagementFactory.getPlatformMBeanServer();

    // Spring context - used to load MBeans
    XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource(
            "resources/JMXcontent.xml"));

    // Unique identification of MBeans
    ThreadPoolManager threadBean = (ThreadPoolManager) factory.getBean("ThreadPoolBean");
    ObjectName threadName = null;

      try {
          // Uniquely identify the MBeans and register them with the platform MBeanServer 
          threadName = new ObjectName("THREADING:name=ThreadBean");
          mbs.registerMBean(threadBean, threadName);
       } catch(Exception e) {
          e.printStackTrace();
       }

我从 ThreadPoolTask​​Executor 继承了 ThreadPoolManager,以便让它能够访问 Thread 属性的 getter 和 setter 方法,例如:public void setCorePoolSize(int corePoolSize)

EDIT:

我已经实现了使用:

public void setCorePoolSize(int corePoolSize){
    super.setCorePoolSize(corePoolSize);
}

包裹在:

    public void changeCorePoolSize(int x){
    setCorePoolSize(x);

}

现在,操作出现在 MBeans 选项卡中。然而,属性显示为与所使用的不同的值。我已经在 ThreadContext.xml 中设置

property name="corePoolSize" value="5"

然而,当查看属性设置为 1 时,这是默认值。我可以通过 Jconsole 更改此设置changeCorePoolSize操作,但只有一个装饰效果,改变显示的值,但不改变正在进行的过程,该过程仍然有 5TaskExecutor 线程仍在继续。

我在做的事情中是否遗漏了一些东西?什么可能导致我通过 ThreadContext.xml 设置的属性与 Jconsole 属性中显示的属性之间断开连接?


减少 CorePoolSize 应该足以减少活动线程的数量,但只有在当前运行的命令完成后才会生效。

请注意 MaxPoolSize 的影响,如果工作队列已满,它可能会增加活动线程的数量。

如果您有兴趣,我们打包了一个启用 JMX 的 util.concurrent ThreadPoolExecutor http://code.google.com/p/xebia-france/wiki/ManagedExecutorService并通过一个简单的基于 Spring XML 命名空间的配置公开它。它公开指标(activeCount、completedTackCount 等)和运行时配置参数(corePoolsize、maxPoolsize)。 您只需声明:

<beans 
   xmlns:management="http://www.xebia.fr/schema/xebia-management-extras"
   ... >

   <!-- MBeanExporter is in charge of registering the ExecutorService MBean -->
   <context:mbean-export />

   <management:executor-service 
       id="my-executor" 
       pool-size="1-10" 
       queue-capacity="5"
       keep-alive="5"
       rejection-policy="ABORT" />
   ...
<beans>

该库包含 JSP 页面和 Hyperic HQ 插件来监视这些线程池。

与许多其他 JMX 附加功能打包在一起,以简化对常见组件(dbcp、util.concurrent、cxf、jms 等)的监控,并根据商业友好的 Apache 软件许可证提出建议,网址为:http://code.google.com/p/xebia-france/wiki/XebiaManagementExtras http://code.google.com/p/xebia-france/wiki/XebiaManagementExtras .

希望这可以帮助,

Cyrille

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过jmx在运行时修改ThreadPoolTask​​Executor 的相关文章

  • 使用 xuggle 将 mp3 转换为 wav 出现异常

    我正在尝试将 mp3 转换为 wav 代码在这里 String mp3 F work pic2talk38512 mp3 String wav F work pic2talk38512 wav TranscodeAudioAndVideo
  • 适用于 Solaris 的 Java 8 中缺少 javaws

    看起来 Oracle 从 Java 8 for Solaris 中删除了 Java Web Start javaws 在 Java 8u51 中不再可用 来自兼容性指南 http www oracle com technetwork jav
  • DateTimeFormatter.parseLocalDate 抛出 UnsupportedOperationException

    该API用于解析本地日期 http joda time sourceforge net apidocs org joda time format DateTimeFormatter html parseLocalDate 28java la
  • ASM之前看一下maxStack指令吗?

    我正在尝试使用 ASM 库将字节代码转换为不同的格式 这可以使用 MethodVisitor 来完成 就像这个简单的测试代码一样 return new MethodVisitor ASM7 Override public void visi
  • JSON 对象数组转 Java POJO

    将此 JSON 对象转换为 java 中的类 您的 POJO 类中的映射将如何 ownerName Robert pets name Kitty name Rex name Jake This kind of question is ver
  • Spring 术语中命令、表单、业务和实体对象之间的区别?

    我试图理解这些对象在松散耦合系统方面的差异 业务对象与实体对象相同吗 我可以使用 MVC 中的业务或实体对象作为我的命令对象吗 命令对象与表单对象相同吗 只是寻找 Spring 术语和用法中对象类型的说明 我在 stackoverflow
  • 将 EditText 聚焦在设备上运行的 PopupWindow 中时出现异常

    我正在为 Android 开发一个弹出窗口 它正在工作 我在上面添加了一个 EditText 和一个按钮 当在 ADV 上运行时 它可以正常工作 而在设备上运行时 当我专注于 EditText 时 这会抛出一个奇怪的异常 android v
  • 在 JavaFX 中拖动未装饰的舞台

    我希望将舞台设置为 未装饰 使其可拖动且可最小化 问题是我找不到这样做的方法 因为我遇到的示例是通过插入到主方法中的方法来实现的 我想通过控制器类中声明的方法来完成此操作 就像我如何使用下面的 WindowClose 方法来完成此操作 这是
  • 使用 CrudRepository 进行自定义查询

    我想使用 CrudRepository 自定义查询 这是我的代码 Repository public interface CustomerRepository extends CrudRepository
  • 在java中是否可以使用反射创建没有无参数构造函数的“空白”类实例?

    我有一个没有默认构造函数的类 我需要一种方法来获取此类的 空白 实例 空白 意味着实例化后所有类字段都应具有默认值 如 null 0 等 我问这个问题是因为我需要能够序列化 反序列化大对象树 而且我无法访问该对象类的源 并且类既没有默认构造
  • Java中无参数的for循环

    我在看别人的代码 发现了这段代码 for 我不是 Java 专家 这行代码在做什么 起初 我认为这会创建一个无限循环 但在该程序员使用的同一个类中 while true 其中 如果我错了 请纠正我 是一个无限循环 这两个相同吗 为什么有人会
  • wsdl 没有服务元素

    我必须使用 WCF Web 服务并获得 WSDL 外部的 因此无法控制 WSDL 在 WSDL 定义中 我没有找到包含服务 端口和地址元素的服务元素 WSDL 中不存在这种情况正常吗 这对于 WCF WSDL 来说很常见吗 我正在尝试使用轴
  • 我可以关闭并重新打开套接字吗?

    我学习了一个使用套接字的例子 在此示例中 客户端向服务器发送请求以打开套接字 然后服务器 侦听特定端口 打开套接字 一切都很好 套接字从双方 客户端和服务器 打开 但我仍然不清楚这个东西有多灵活 例如 客户端是否可以关闭一个打开的 从两端
  • Storm Spout 未收到 Ack

    我已经开始使用storm 所以我使用创建简单的拓扑本教程 https github com nathanmarz storm wiki Tutorial 当我运行我的拓扑时LocalCluster一切看起来都很好 我的问题是我没有得到元组的
  • Checkstyle - 方法按修饰符排序

    是否可以添加到 checkstyle 规则以按修饰符对类中的方法进行排序 我的意思是开头的公共方法和最后的私有方法 MethodsOrderCheck做这个工作 检查文档 https www qulice com qulice checks
  • Java 相当于 Python 的 urllib.urlencode(基于 HashMap 的 UrlEncode)

    From https stackoverflow com questions 2018026 should i use urllib or urllib2 2018103 2018103 Java 中 Python 的 urllib url
  • Drools:为什么是无状态会话?

    Drools 使用会话来存储运行时数据 为此 有两种会话 无状态和有状态 与无状态会话相比 有状态会话允许迭代调用 并且似乎比无状态会话具有所有优势 那么为什么会有无状态会话呢 他们服务的目的是什么 与有状态会话相比 它们的优势是什么 谢谢
  • JSP 和 scriptlet

    我知道现在使用 scriptlet 被认为是禁忌 没关系 我会同意Top Star的话 因为我目前只是Java新手 到目前为止我听到的是 它是为了让设计师的生活更轻松 但我想知道 这是否与JSP页面的性能有关 另一方面 如果只是为了 让设计
  • 如何在 Servlet 中打开弹出窗口,然后重定向页面

    我想在调用 servlet 时打开一个弹出窗口 然后想将 servlet 重定向到某个 jsp page 这就是我所做的 protected void doGet HttpServletRequest request HttpServlet
  • 安卓框架?

    是否有任何框架比构建 Android 应用程序更容易 您会对其中一个感兴趣吗 很快就会有 我正在开发 DroidFu 一个 Android 共享库 它将为您提供 活动 和服务 中直接提供大量实用功能 例如生成列表和错误对话框 检查 Inte

随机推荐

  • Google Play 发布前报告 - 资源名称

    我应该如何提供 EditText 的 id 来填充 Google Play 上的预发布报告 应用程序的 Beta Alpha 版本 的凭据 我试过 id editTextLogin editTextLogin R id editTextLo
  • 在 Webcontrol 上使用“Using”块有什么问题?

    我有以下使用 using 阻止TableHeaderCell LiteralControl HyperLink and GridViewRow try finally 该代码按缩进方式工作 使用 使用 块处理控件是否存在任何问题 陷阱 如下
  • Django 文件上传

    这是视图中的代码 def index request if request method POST a request POST logging debug a title logging debug a file form UploadF
  • 如何在 Magento 中获取完整的产品图片 url

    如何获取完整的产品图片 urlmagento 我需要将数据从magento迁移到django所以我需要得到产品完整图像网址迁移站点 这是我的代码
  • Android L——在视图上播放波纹效果

    我试图在某个时间在视图上 而不是在被触摸的视图上 发挥连锁反应 来自 Android L 具体来说 当用户成功更改某些文本时 我希望某个视图播放绿色波纹效果以显示成功 有什么办法可以做到这一点吗 我尝试将 RippleDrawable 放入
  • Visual Studio 诊断工具 - 如何更改选定的进程?

    我在用着Diagnostic Tools在 Visual Studio 2015 中调试 SharePoint Web 部件 我依附于一些w3wp exe处理并且窗口显示以下消息 Multiple processes are being d
  • 在 Visual Studio 中创建一个新的 TypeScript 项目

    如何开始在 Visual Studio 中编写 TypeScript 项目 当我创建一个新项目时没有这个选项 我安装了 Visual Studio 2012 以及 TypeScript 插件 我刚刚找到了解决方案 手动安装 VS Exten
  • D3D11CreateDevice() 返回垃圾值并失败

    我刚刚开始用这本书学习直接3D使用 DirectX11 进行 3D 游戏编程 我按照第一个教程进行操作 并收到一个消息框 显示 D3D11CreateDevice Failed 我检查了这个函数的返回值 得到了垃圾值 2005270483
  • 如何在vb.net中查看设计器代码

    我想看看设计师代码 我想看看如何使用或扩展表单生成 myForm 我的意思是在 C 中我可以看到 Designer cs 文件中的代码 但在 vb net 中我看不到 在 VB Net 中 为了查看设计器文件 您必须单击解决方案资源管理器上
  • 报告本地时间而不是 UTC 服务器时间

    我创建了一个页面 其中向用户显示服务器报告的天气数据 时间保存为 UTC 如何从 Blazor 服务器应用程序显示本地用户或浏览器的时间 我遇到了类似的问题并创建了一个名为的库布拉佐尔时间 https github com dustout
  • List 和 IEnumerable 的区别

    在实现这个通用的同时归并排序 http en wikipedia org wiki Merge sort 作为一种代码卡塔 http en wikipedia org wiki Kata 28programming 29 我偶然发现了 IE
  • Shopify:错误:[API] 此操作需要商家批准 write_themes 范围

    我是 Shopify 新手 我正在尝试在本地设置 Shopify 主题套件 我已经创建了一个私人应用程序并设置了我的商店 但是在尝试使用主题套件访问商店时出现此错误 Errors API This action requires merch
  • Silverlight:强制画布失效或重新绘制自身?

    我有一个 Silverlight 应用程序 上面有一个 Canvas 在该画布上 我动态地 绘制 了一堆东西 但向画布添加了控件 我在画布区域之外有一个按钮可以清除内容 对象已被删除 成功 然而 Canvas 区域不会立即刷新 目前 画布本
  • Memcached 最佳实践 - 小对象和大量键还是大对象和少量键?

    I use memcached http www danga com memcached 存储复杂计算的整数结果 我有数百个可以缓存的整数对象 我应该将它们缓存在更复杂的对象中的单个键下 还是应该为对象使用数百个不同的键 我正在缓存的对象不
  • 如何使用 Angular2 将服务注入动态组件

    我有一个使用 DynamicComponentLoader 动态加载另一个组件的组件 然而 动态组件需要注入服务 但是 我不确定如何解决这个问题 我从 Angular io 文档中看到 DynamicComponentLoader 接受 R
  • JavaScript 中变音符号的标题大小写(非 ASCII)

    是否可以创建一个 JavaScript 函数 可以将字符串转换为标题大小写 但可以处理非 ASCII Unicode 字符 例如 使用以下字符 etc 例如 如果字符串是 anders ngstr m 则应将其转换为 Anders ngst
  • 耳机上听不到 SuperCollider 的声音

    我刚刚开始使用超级对撞机学习音频编程 当我播放声音时 我可以在扬声器上听到它 但在耳机上听不到 我在启动服务器时收到以下消息 启动 57110本地主机JackDriver 客户端名称是 SuperCollider SC AudioDrive
  • C#:如何打开 Windows 资源管理器窗口并选择多个文件

    在 Windows Media Player 的库中 您可以选择一个或多个音乐文件 然后 您可以右键单击并在上下文菜单中选择打开文件所在位置 这将为文件所在的每个目录打开一个 Windows 资源管理器窗口 并且将为您选择文件 假设我们的库
  • 尝试使用屏蔽输入对 LSTM Seq2Seq 执行推理时出现 CUDNN_STATUS_BAD_PARAM

    我正在使用 keras 层tensorflow 2 0建立一个简单的基于 LSTM 的 Seq2Seq 文本生成模型 versions我正在使用 Python 3 6 9 Tensorflow 2 0 0 CUDA 10 0 CUDNN 7
  • 如何通过jmx在运行时修改ThreadPoolTask​​Executor

    我在通过 JConsole 修改 MBean 属性时遇到问题 我有一个 Threading bean 它通过以下方式调用 public static void main String args throws Exception JMX ne