转载于:http://njulinq.blog.51cto.com/1257169/283585
为提高系统效率,OpenNMS在很多模块中启用了多线程,并通过线程池来对这些线程进行管理。而且具体线程数可以通过配置文件进行配置,例如在%OpenNMS_HOME%/etc/capsd-configuration.xml文件中,就可以对网络服务发现和服务重新扫描的线程数进行配置:
- <capsd-configuration
- rescan-frequency="86400000"
- initial-sleep-time="30000"
- max-suspect-thread-pool-size="10"
- max-rescan-thread-pool-size="10">
其中的max-suspect-thread-pool-size就定义了可以同时对多少个IP地址进行服务扫描,而max-rescan-thread-pool-size则定义了可以同时对多少个IP进行服务重新扫描。
本文将从源码来剖析其线程池的实现机制。在OpenNMS的代码中,是通过RunnableConsumerThreadPool来实现线程池的,我们首先看下该类是如何被使用的。
- m_runner=newRunnableConsumerThreadPool("TestPool",0.6f,1.0f,10);
首先创建一个线程池对象,构造函数的4个参数,第一个和最后一个比较好解释,第一个就是线程池名字,给个名字主要在日志中比较好区分各个线程的执行轨迹,最后一个参数就是定义线程池的大小。第二个和第三个参数稍微解释下,它们分别定义了两个分水岭(或称预置),其实就是当前线程池负载情况。为解释这两个参数,首先需要定义几个概念:
-
等待调度对象: 等待调度对象就是所有需要执行的对象,它们最终都要进入线程池由线程池分配一个线程来执行
-
线程池: 线程池是所有线程的一个容器,它同时负责线程的创建、调度及销毁
-
线程: 线程不同于等待调度对象,它是物理可执行的对象,它负责最终执行等待调度对象,而且一般情况下,线程数都小于等待调度对象数目
有了上面几个概念,就比较好解释那两个参数了,这两个参数分别成为低水印值和高水印值,它的取值实际上是等待调度对象与线程池中线程数的比值。低水印值的含义是当比值小于这个值后,即等待调度对象少于线程池中线程数且达到某个度时,则需要销毁一些线程池中的线程数,以减少系统负载。而高水印值的含义则是当比值大于这个值后,在不超出线程池大小的前提下,增加线程池中线程数。所以一般情况下高水印值都是取1。
下面开始深入线程池的内部了,首先线程池是用了一个先进先出队列来保存等待调度对象,
- privateSizingFifoQueue<Runnable>m_delegateQ;
用一个简单的数组来保存线程池,
- privateFiber[]m_fibers;
- privatefloatm_hiRatio;
- privatefloatm_loRatio;
- privateintm_maxSize;
上面除了保存线程的数组外,另外三个变量依次表示高水印值,低水印值及线程池大小。
在下一篇文章中将介绍线程池的具体操作流程。
分享到:
相关推荐
OpenNMS是开源网络管理平台,它主要用于监控网络设备、服务和应用程序的性能与可用性。这个"opennms1.12.5-1源码下载"标题指的是该平台的1.12.5-1版本的源代码,允许用户深入理解其内部工作原理,进行定制开发或调试...
openNMS1.6.5源码,最新稳定的版本。OpenNMS是第一个开发在开源模式下的企业级网络管理平台应用。OpenNMS的目标是成为一个真真的分布式、可升级的网络管理平台,尽管它看似一个FCAPS网络管理模型,使之可用于开放...
通过分析`opennms-1.10.3-1`源代码,我们可以学习到网络监控的最佳实践,了解如何设计和实现大规模网络管理解决方案。这对于网络管理员、系统集成商以及对网络管理有兴趣的开发者来说,都是极其宝贵的资源。同时,...
"opennms-source.tar.gz_SNMP_openNMS"这个压缩包,便是OpenNMS源码的载体,它包含了使用SNMP(简单网络管理协议)进行网络监控和管理所需的所有组件。 SNMP,全称Simple Network Management Protocol,是一种广泛...
五、报告与分析 1. **历史数据**:OpenNMS存储长时间范围内的监控数据,可用于趋势分析和容量规划。 2. **自定义报告**:你可以创建定制化的报告,包含网络状态、性能指标、故障历史等信息。 3. **报表导出**:...
OpenNMS-Helm是基于OpenNMS监控系统的Grafana插件,它能够扩展Grafana的功能,以适应更复杂的网络监控需求。OpenNMS-Helm的安装和配置涉及到多个步骤,包括系统的前置安装条件、安装OpenNMS-Helm、启动服务、启用...
opennms 中文 http://www.qoswork.com OpenNMS 官方文档 https://qoswork.github.io/odoc/
OpenNMS Javascript API 用于访问OpenNMS网络监视平台的客户端API。 在代码中使用OpenNMS.js API 中提供了有关入门以及如何使用API的。 完整的API列表可在。 使用OpenNMS.js命令行 安装 运行npm install -g ...
standalone-opennms-1.6.8.jar
通过opennms-ksc-grafana,用户可以充分利用Grafana的可视化优势,对OpenNMS KSC的监控数据进行深度分析和展示,这对于网络运维团队来说,无疑是一种提升效率、优化工作流程的有效手段。无论是日常监控、问题排查,...
为了使用 OpenNMS Modules Manager,你需要先将其克隆或下载到本地,例如,你可以找到名为 "opennms-modules-manager-master" 的压缩包文件,解压后通过 Java 运行环境执行相应的脚本或命令。在执行前,确保你的系统...
PagerDuty-OpenNMS PagerDuty-OpenNMS 是一个由 OpenNMS 运行的脚本,它使用 curl 调用 PagerDuty 集成 API。配置配置本身并不过分复杂: 将附加的脚本放在 $OPENNMS_HOME/contrib/pagerduty 将 API 密钥从...
OpenNMS-IP-发现-供应-适配器可选的Provisioning Adapter,用于将IP接口的自动发现管理为非托管动机找到想要发现并持久存储数据库中所有IP接口,但仅主动监视受监控的服务的OpenNMS用户和操作员是很常见的,这些服务...
厨师食谱,用于管理OpenNMS Horizon的安装和配置。 当前版本支持CentOS 6和7的发行版16、17、18、19、20、21、22、23、24、25、26。 版本号 从OpenNMS Horizon 16开始,该食谱版本的MSB与其支持的OpenNMS ...
OpenNMS-KSC至Grafana 将 KSC报表转换为仪表板。 已针对Grafana 4.x,5.x和6.x进行了测试; 尽管该工具仅在Grafana 5.x或更高版本上在标准输出上提供有关生成的仪表板的信息。 由于Grafana的工作方式不同,它不会...
OpenNMS-阈值-事件-生成器一种基于当前阈值设置生成良好阈值事件定义(和通知)的工具。 要编译该工具,请使用 Maven: mvn install这将生成一个带有依赖项的 JAR,以便能够轻松执行该工具,例如: java -jar ...
OpenNMS-资源-供应-适配器 用于填充定义为复杂 SNMP 表的字符串的其他 MibObject 的配置适配器 要求: 1.0.x OpenNMS 14. 1.1.x OpenNMS 15/16。
OpenNMS集成API 该项目旨在通过引入一个稳定的接口来对其进行编写,从而使其更容易为OpenNMS编写插件和扩展。 然后,OpenNMS和Meridian的版本将实现API的至少一个主要版本。 特征 API的用户当前可以利用以下功能和...
这是一个 MCollective 应用程序文件,它允许 mcollective 生成 OpenNMS 网络管理系统的供应申请。 先决条件版本 >=1.10.0 的正在运行的 OpenNMS 服务器(早期版本中存在一个错误,会导致配置重复节点) 对 ...