p2p网站怎么做,域名制作网站吗,阿里巴巴国际站入驻费用及条件,深圳品牌营销型网站建设Java监视工具的选择非常广泛#xff08;由Google提供的随机选择和顺序#xff09;#xff1a; javamelody 压力探头 JVisualVM 控制台 贾蒙 Java JMX Nagios插件不适用 此外#xff0c;还有各种专用工具#xff0c;例如ActiveMQ #xff0c; JBoss #xff0c; Qu… Java监视工具的选择非常广泛由Google提供的随机选择和顺序 javamelody 压力探头 JVisualVM 控制台 贾蒙 Java JMX Nagios插件不适用 此外还有各种专用工具例如ActiveMQ JBoss Quartz Scheduler Tomcat / tcServer ……那么您应该使用哪一个作为最终的监视仪表板 好吧它们都不提供您可能需要的即用型功能。 在某些应用程序中您必须不断监视给定JMS队列的内容和大小。 已知其他一些存在内存或CPU问题。 我还看到了系统管理员必须不断运行一些SQL查询并检查结果甚至分析日志以确保某些基本后台进程正在运行的软件。 可能性是无止境的因为它实际上取决于软件及其用例。 更糟糕的是您的客户并不关心GC活动打开的JDBC连接数量以及此令人讨厌的批处理进程是否挂起。 它应该工作 。 在本文中我们将尝试开发简单廉价但功能强大的管理控制台。 它将基于单个二进制结果的思想构建-是否有效。 如果单个运行状况指示器为绿色则无需进一步说明。 但 如果它变成红色我们可以轻松地向下钻取。 之所以可能是因为我们没有显示数百个不相关的指标而是将它们分组为树状结构。 树中每个节点的健康状况与最坏的孩子一样糟糕。 这样如果我们的应用程序发生任何不良情况它将冒泡。 我们不会强迫系统管理员不断监视多个指标。 我们决定什么是重要的即使是我们软件中最微小的一部分也出现了故障它也会弹出。 将其与没有绿色/红色版本和电子邮件通知的连续集成服务器进行比较。 相反您必须每隔一个构建就去服务器并手动检查代码是否正在编译以及所有测试是否都是绿色的。 日志和结果在那里但是为什么要解析它们并手动汇总呢 这就是我们试图在我们自己的监控解决方案中避免的事情。 作为基础我选择了Jolokia JMX到HTTP桥这不是第一次 。 JVM已经提供了监视基础结构那么为什么要重新发明它呢 同样由于Jolokia整个仪表板都可以在客户端JavaScript中实现。 这具有几个优点服务器占用空间最小还允许我们通过添加度量标准或更改警报阈值来快速调整度量标准。 我们将从将各种JMX指标下载到客户端浏览器开始。 我已经开发了一些用于演示目的的小型应用程序其中使用了尽可能多的技术例如TomcatSpringHibernateActiveMQQuartz等。由于我发现Jolokia有点麻烦所以我没有使用内置的JavaScript客户端库 。 但是正如您所看到的获取大量指标只是一个AJAX调用的问题。 function request() {var mbeans [java.lang:typeMemory,java.lang:typeMemoryPool,nameCode Cache,java.lang:typeMemoryPool,namePS Eden Space,java.lang:typeMemoryPool,namePS Old Gen,java.lang:typeMemoryPool,namePS Perm Gen,java.lang:typeMemoryPool,namePS Survivor Space,java.lang:typeOperatingSystem,java.lang:typeRuntime,java.lang:typeThreading,Catalina:namehttp-bio-8080,typeThreadPool,Catalina:typeGlobalRequestProcessor,namehttp-bio-8080,Catalina:typeManager,context/jmx-dashboard,hostlocalhost,org.hibernate:typeStatistics,applicationjmx-dashboard,net.sf.ehcache:typeCacheStatistics,CacheManagerjmx-dashboard,nameorg.hibernate.cache.StandardQueryCache,net.sf.ehcache:typeCacheStatistics,CacheManagerjmx-dashboard,nameorg.hibernate.cache.UpdateTimestampsCache,quartz:typeQuartzScheduler,nameschedulerFactory,instanceNON_CLUSTERED,org.apache.activemq:BrokerNamelocalhost,TypeQueue,Destinationrequests,com.blogspot.nurkiewicz.spring:namedataSource,typeManagedBasicDataSource];return _.map(mbeans, function(mbean) {return {type:read,mbean: mbean}});
}$.ajax({url: jmx?ignoreErrorstrue,type: POST,dataType: json,data: JSON.stringify(request()),contentType: application/json,success: function(response) {displayRawData(response);}
}); 只是为了向您概述客户端可访问的信息种类我们将首先转储所有内容并将其显示在jQuery UI手风琴上 function displayRawData(fullResponse) {_(fullResponse).each(function (response) {var content $(pre/).append(JSON.stringify(response.value, null, \t));var header $(h3/).append($(a/, {href:#}).append(response.request.mbean));$(#rawDataPanel).append(header).append($(div/).append(content));});$(#rawDataPanel).accordion({autoHeight: false, collapsible: true});
} 请记住这只是出于参考和调试的目的我们并不是要显示无尽的JMX属性列表。 如您所见实际上有可能在浏览器中使用Jolokia和JavaScript来实现完整的jconsole端口……也许是下次有人愿意提供帮助吗。 回到我们的项目让我们选择一些基本指标并将它们显示在列表中 该列表本身看起来很有希望。 我没有显示图表或值而是为每个指标分配了一个图标稍后会详细介绍。 但是我不想一直浏览整个列表。 为什么我不能只有一个汇总多个指标的指标 由于我们已经在使用jsTree 因此转换相对简单 在第一个屏幕截图中您可以看到一个健康的系统。 由于总体指标为绿色因此实际上没有必要进行深入分析。 但是第二个屏幕截图的情况更糟。 系统负载惊人地高交换空间也需要注意但重要性不高。 如您所见前一个指标一直上升到总体最高指标。 通过这种方式我们可以轻松地发现系统中发生的错误。 您可能想知道当我们一开始只拥有原始JMX数据时我们是如何获得这棵漂亮的树的 这里没有魔术看看我如何构造树 function buildTreeModel(jmx) {return new CompositeNode(Overall, [new CompositeNode(Servlet container, [new Node(Active HTTP sessions,jmx[Catalina:context/jmx-dashboard,hostlocalhost,typeManager].activeSessions,Node.threshold(200, 300, 500)),new Node(HTTP sessions create rate,jmx[Catalina:context/jmx-dashboard,hostlocalhost,typeManager].sessionCreateRate,Node.threshold(5, 10, 50)),new Node(Rejected HTTP sessions,jmx[Catalina:context/jmx-dashboard,hostlocalhost,typeManager].rejectedSessions,Node.threshold(1, 5, 10)),new Node(Busy worker threads count,jmx[Catalina:namehttp-bio-8080,typeThreadPool].currentThreadsBusy,Node.relativeThreshold(0.85, 0.9, 0.95, jmx[Catalina:namehttp-bio-8080,typeThreadPool].maxThreads))]),//...new CompositeNode(External systems, [new CompositeNode(Persistence, [new Node(Active database connections,jmx[com.blogspot.nurkiewicz.spring:namedataSource,typeManagedBasicDataSource].NumActive,Node.relativeThreshold(0.75, 0.85, 0.95, jmx[com.blogspot.nurkiewicz.spring:namedataSource,typeManagedBasicDataSource].MaxActive))]),new CompositeNode(JMS messaging broker, [new Node(Waiting in requests queue,jmx[org.apache.activemq:BrokerNamelocalhost,Destinationrequests,TypeQueue].QueueSize,Node.threshold(2, 5, 10)),new Node(Number of consumers,jmx[org.apache.activemq:BrokerNamelocalhost,Destinationrequests,TypeQueue].ConsumerCount,Node.threshold(0.2, 0.1, 0))])])]);
} 树模型非常简单。 根节点可以具有子节点列表。 每个子节点可以是代表单个评估的JMX度量的叶子也可以是代表孙子集的复合节点。 每个孙子可以依次是叶或另一个复合节点。 是的这是Composite设计模式的简单示例 但是使用策略模式并不明显。 仔细观察每个叶节点对象都具有三个属性标签在屏幕上看到的内容值单个JMX度量和一个奇数函数Node.threshold200300500…这是什么 它实际上是一个更高阶的函数函数返回一个函数稍后将用于解释JMX度量。 请记住原始值是没有意义的必须将其解释并转换为美观的图标指示符。 此实现的工作方式如下 Node.threshold function(attention, warning, fatal) {if(attention warning warning fatal) {return function(value) {if(value attention) { return 1.0; }if(value warning) { return 0.5; }if(value fatal) { return 0.0; } else { return -1.0; }}}if(attention warning warning fatal) {return function(value) {if(value attention) { return 1.0; }if(value warning) { return 0.5; }if(value fatal) { return 0.0; } else { return -1.0; }}}throw new Error(All thresholds should either be increasing or decreasing: attention , warning , fatal);} 现在变得清楚了。 该函数接收级别阈值并返回将其转换为-11范围内的数字的函数。 我本可以直接返回图标但是我想从GUI表示中抽象树模型。 如果现在返回活动HTTP会话指标的Node.threshold200300500示例那么最终结果很明显如果活动HTTP会话数超过200则显示注意图标而不是“确定”。 如果超过300则会出现警告 。 出现500以上的致命图标。 此功能是一种了解输入并以某种方式处理它的策略 。 当然这些值/函数仅是示例但这是真正艰苦工作的体现–对于每个JMX指标您都必须定义一组理智的阈值。 500个HTTP会话是灾难还是我们只能处理的高负载 90的CPU负载是否有问题或者如果它真的很低我们应该开始担心吗 一旦微调了这些级别就不再需要同时监视所有内容。 只需查看顶级单一指标即可 。 如果是绿色休息一下。 如果不是请在几秒钟内向下钻取以找出真正的问题所在。 简单有效。 我是否提到了它不需要在服务器端进行任何更改除了添加Jolokia并将其映射到某个URL 显然这只是一个小的概念验证而不是完整的监视解决方案。 但是如果您有兴趣尝试和改进它则可以像从我的GitHub 帐户一样获得整个源代码。 参考来自JCG合作伙伴的 Jolokia和JMX的客户端服务器监视 Java和社区博客中的Tomasz Nurkiewicz。 翻译自: https://www.javacodegeeks.com/2012/02/client-side-server-monitoring-with.html