Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JMX远程部署体系结构_Java_Monitoring_Jmx - Fatal编程技术网

Java JMX远程部署体系结构

Java JMX远程部署体系结构,java,monitoring,jmx,Java,Monitoring,Jmx,我第一次阅读了JMX,并试图看看它是否是解决我们在生产中遇到的问题的可行方案 我们有一个体系结构,它不断地访问远程web服务(由不同的团队在他们自己的服务器上管理)并从中请求数据(我们也从该服务缓存数据,但缓存不是非常有效,这是一个棘手的问题) 我们希望能够在代码中的一个特定点上,在我们访问web服务之前,动态地打开/关闭日志记录,在那里我们可以看到我们发送给服务的确切URL/查询。如果我们只是盲目地设置日志记录级别并记录所有web服务请求,那么我们的日志文件就会非常大 JMX似乎是一个解决方案

我第一次阅读了JMX,并试图看看它是否是解决我们在生产中遇到的问题的可行方案

我们有一个体系结构,它不断地访问远程web服务(由不同的团队在他们自己的服务器上管理)并从中请求数据(我们也从该服务缓存数据,但缓存不是非常有效,这是一个棘手的问题)

我们希望能够在代码中的一个特定点上,在我们访问web服务之前,动态地打开/关闭日志记录,在那里我们可以看到我们发送给服务的确切URL/查询。如果我们只是盲目地设置日志记录级别并记录所有web服务请求,那么我们的日志文件就会非常大

JMX似乎是一个解决方案,在这里,我们使用一个托管bean控制本节中的日志记录,然后可以通过一些管理器(可能只是基本的HTML适配器)远程设置该bean的状态(
setlogginenabled(boolean)
,等等)

我的问题都与部署有关:

  • 如果我编写MBean接口和impl,以及代理(向平台MBean服务器注册MBean和HTML适配器),我是在我的主web应用程序(WAR)中编译、打包和部署它们,还是它们必须编译到自己的(比如说JAR)中,并放在我的应用程序旁边的JVM上
  • 我们有一个开发、质量保证、演示和产品环境;是否可以有一个单一的HTML适配器指向一个注册了不同MBean的MBean服务器,每个环境一个?最好有一个URL,您可以在不同的环境中管理bean
  • 如果我上面的第一个问题的答案是MBean接口、impl和代理都部署在您的应用程序中,那么是否可以将启用JMX的应用程序部署在一台服务器上(例如,Demo),而从另一台服务器进行监视

提前谢谢

JMX
是一种用于远程管理应用程序的技术,在不重新启动的情况下更改配置是最合适的用法

但在你的情况下,我不明白你为什么需要JMX。例如,如果您使用
Log4j
进行日志记录,您可以配置一个文件监视器,只需将日志记录更改为尽可能低的级别。即调试。这不需要重新启动和IMHO,这本来应该是您最初的设计,即在伐木机和水平仪周围工作。现在,还不清楚您的意思以及使用
setloggingsenable
会发生什么

在任何情况下,托管bean都应该与您的应用程序一起部署,如果您使用的是Spring,那么您就很幸运了,因为它提供了与
JMX
的非常好的集成,您可以将Spring bean部署为托管bean

最后,当您连接到进程时,您将看到为该JVM运行的托管bean。所以我不确定你对第二点的确切意思


无论如何,我希望这对您如何打包MBean有一点帮助,这在很大程度上是一个可移植性问题。这些特定的服务在这个webapp的范围之外是否有实际的用处?如果不是,我会简单地声明您的webapp“JMX可管理”,并在中构建它。否则,将MBean组件化,将它们放入jar,将jar放入WEB-INF/lib,并使用WEB.xml中配置的启动servlet初始化它们

对于单个HTML适配器,是的,这是可能的。可以将其视为拥有开发、质量保证、演示和产品MBeanServer,然后是一个主MBeanServer。你的HTML适配器应该呈现主界面。然后,您可以使用在主服务器中注册Dev、QA、Demo和Prod的级联。现在,您将在HTML适配器显示中看到所有5个MBeanServer bean


这是否回答了您的第三个问题?

对于您的第一个问题,无论我们将log4j设置为什么日志级别,当它进行日志记录时,它将记录数十万、数百万条消息,这对我们来说太多,无法处理,因此基于日志级别的解决方案不适用于我们对第二个问题的响应,假设我们在blah.example.com上有一个演示服务器。此服务器正在运行Tomcat,它部署了我们的WAR文件(一个web应用程序)。现在让我们假设我们将WAR的托管bean配置为使用HTML适配器,以便可以从web URL监视/管理它们。该URL是否会关闭blah.example.com,或者我们是否可以将JMX的监控设置为从第二台服务器(如fizz.example.com)提供服务?