jconsole 使用_我的Wiki:使用JConsole对WildFly(或JBoss AS7)进行远程JMX访问

jconsole 使用

与以前的版本相比,JBoss AS7的目标之一是使其在默认情况下更加安全。 受此目标直接影响的领域之一是,您不再期望服务器在端口上公开某些服务,而无需任何身份验证/授权即可访问它。 请记住,在以前的JBoss AS版本中,只要打开了这些端口以进行远程通信,就可以访问JNDI端口,JMX端口而无需任何身份验证/授权。 在JBoss AS7中,此类端口上用于通信的更细粒度的授权允许服务器控制谁可以通过该端口调用操作。

当然,这不仅限于JBoss AS7,而且仍然是WildFly(这是JBoss Application Server的重命名)的目标。 实际上,WildFly向前迈了一步,现在具有“一个单一端口”的功能来进行所有通信。

JBoss AS7和WildFly中的JMX通信

在此背景下,我们现在将重点关注JBoss AS7和WildFly中的JMX通信。 在本文的其余部分,我将使用WildFly(8.2.0 Final)作为参考,但是相同的细节(略有变化)适用于JBoss AS7和WildFly的其他主要版本,这些版本到目前为止已经发布。

WildFly服务器由“子系统”组成,每个子系统都具有一组特定的功能。 例如,有支持Java EE功能集的EE子系统。 然后是支持Web / HTTP服务器功能的Undertow子系统。 同样,有一个JMX子系统公开了服务器上的JMX功能集。 众所周知,我敢肯定,JMX服务通常用于监视甚至管理Java服务器,其中包括远程管理服务器。 WildFly中的JMX子系统允许远程访问JMX服务,并且端口9990是用于该远程JMX通信的端口。

JConsole用于针对JBoss AS7和WildFly的远程JMX访问

Java(JDK)与JConsole工具捆绑在一起,该工具允许连接到公开JMX服务的本地或远程Java运行时。 该工具易于使用,您所要做的就是运行jconsole命令,它将显示一个图形菜单,列出所有本地Java进程,以及一个用于指定远程URL以连接到远程进程的选项:

# Start the JConsole
$JAVA_HOME/bin/jconsole

假设您已经在本地启动了WildFly独立服务器。 现在,当您启动jconsole时,您会注意到WildFly Java进程在您可以连接到的本地运行进程中列出。 选择WildFly Java实例时,将自动连接到它,并且您会注意到服务器公开的MBean。 但是,在本文的上下文中,JConsole中的这种“本地过程”模式不是我们感兴趣的。

让我们使用该JConsole菜单中的“远程进程”选项,该菜单允许您指定用于连接到Java运行时的远程URL以及用于连接到该实例的用户名和密码。 即使我们的WildFly服务器在本地运行,我们也可以使用此“远程进程”选项尝试并连接到它。 因此,让我们尝试一下。 在此之前,让我们考虑以下几点:

  1. 请记住,WildFly中的JMX子系统允许在端口9990上进行远程访问
  2. 对于远程访问JMX,URL的格式为– service:jmx:[vendor-specific-protocol]:// [host]:[port]。 供应商特定的协议在这里很有趣。 对于WildFly,特定于供应商的协议是http-remoting-jmx。
  3. 请记住,WildFly在默认情况下是安全的,这意味着仅因为JMX子系统公开了9990端口以进行远程通信,并不意味着它已开放给任何人通信。 为了允许通过此端口进行通信,必须对调用方客户端进行身份验证和授权。 这由WildFly中的“ ManagementRealm”支持。 允许对此领域进行身份验证和授权的用户访问该端口。

牢记这些要点,让我们首先在管理领域中创建一个用户。 可以使用添加用户命令行脚本(位于JBOSS_HOME / bin文件夹中)完成此操作。 由于有足够的文档资料,因此我将不做详细介绍。 让我们假设我在管理领域中创建了一个名为“ wflyadmin”的用户,并使用了适当的密码。 要验证是否已正确创建用户,请在正确的领域中访问URL http:// localhost:9990 / console的WildFly管理控制台。 系统将要求您输入用户名和密码进行访问。 使用与新创建的用户相同的用户名和密码。 如果登录有效,那么您就很好。 如果不是,那么请确保您在添加新用户时做得正确(正如我说的,我将不赘述添加新用户的细节,因为这只会不必要地延长本文的篇幅)。

因此,在这一点上,我们已经创建了一个名为ManagementManager的名为“ wflyadmin”的用户。 我们将使用相同的用户帐户通过JConsole访问WildFly上的JMX服务。 现在让我们照常启动jconsole:

$JAVA_HOME/bin/jconsole

在JConsole菜单上,让我们再次选择“远程进程”选项,并在URL文本框中使用以下URL:

service:jmx:http-remoting-jmx://localhost:9990

注意:对于JBoss AS 7.xJBoss EAP 6.x ,供应商特定的协议是remoting-jmx,并且通信端口是9999 因此,URL为service:jmx:remoting-jmx:// localhost:9999

在用户名和密码文本框中,使用与新创建的用户/密码相同的密码。 最后,单击“连接”。 你看到了什么? 这是行不通的! 连接失败。 那么出了什么问题呢?

为什么JConsole对WildFly的远程访问不起作用?

您做了所有显而易见的事情来远程访问WildFly JMX服务,但您仍然看到JConsole无法连接到它。 可能是什么原因? 记住,在前面的几点中,我注意到“特定于供应商的协议”很有趣吗? 我们使用http-remoting-jmx,该协议内部依赖于某些WildFly / JBoss特定的库,主要用于远程通信以及身份验证和授权。 这些库特定于WildFly服务器,因此不是标准Java运行时环境的一部分。 启动jconsole时,它将使用标准类路径,该类路径仅包含JDK / JRE中的相关库。

要解决此问题,您需要做的是将WildFly服务器特定的库引入JConsole的类路径中。 在研究如何做之前,让我们看一下需要哪些WildFly特定的库。 工作所需的所有必要类均在JBOSS_HOME / bin / client /文件夹中的jboss-cli-client.jar中。 因此,我们需要做的所有事情就是将此jar包含在jconsole工具的类路径中。 为此,我们使用jconsole工具的-J选项,该选项允许将参数传递给jconsole的Java运行时。 执行该命令的命令是:

$JAVA_HOME/bin/jconsole -J-Djava.class.path=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/jconsole.jar:/opt/wildfly-8.2.0.Final/bin/client/jboss-cli-client.jar

(请注意,对于Windows,classpath分隔符是分号而不是冒号)


注意,针对JBoss AS 7.xJBoss EAP 6.x的服务器特定的jar名为jboss-client.jar,并且位于相同的JBOSS_HOME / bin / client目录位置。

因此,我们使用-J选项将-Djava.class.path作为参数传递给jconsole Java运行时。 注意,我们在该类路径中指定的不仅仅是服务器特定的jar。 这是因为,使用-Djava.class.path应该包含完整的类路径。 我们包括JConsole所需的Java JDK lib文件夹中的jar,以及该类路径中服务器特定的jar。

运行该命令应该像往常一样启动JConsole,让我们继续并选择“ Remote process”选项并指定与以前相同的URL:

service:jmx:http-remoting-jmx://localhost:9990

并使用与以前相同的用户名和密码,然后单击“连接”。 这次您应该能够连接,并且应该开始看到通过JMX公开的MBean和其他服务。

如何提供执行此必要的类路径设置的脚本?

由于尝试使用JConsole进行针对WildFly的远程访问是很平常的事情,因此可以合理地期望拥有一个设置类路径的脚本(如上所述),然后可以使用该脚本。 这就是为什么WildFly会提供这样的脚本的原因。 它位于JBOSS_HOME / bin文件夹中,称为jconsole.sh(对于Windows,称为jconsole.bat)。 这只是一个包装脚本,在适当设置了类路径之后,该脚本内部调用Java JDK中存在的jconsole工具。 您所要做的就是运行:

$JBOSS_HOME/bin/jconsole.sh

在真正的远程计算机上针对WildFly使用JConsole怎么办?

到目前为止,我们使用的是与WildFly实例在同一台计算机上的jconsole工具,这意味着我们可以访问文件系统上WildFly安装目录中存在的WildFly服务器特定jar的文件系统。 这使我们可以设置jconsole的类路径以指向本地文件系统上的jar?

如果要从一台远程计算机对另一台计算机上安装并运行的WildFly服务器运行jconsole,该怎么办。 在这种情况下,您的远程客户端计算机将无法访问WildFly安装目录的文件系统。 因此,要使jconsole在这种情况下运行,您必须将JBOSS_HOME / bin / jboss-cli-client.jar复制到远程客户端计算机上,并复制到您选择的目录中,然后按照说明设置jconsole工具的类路径并将其指向该jar位置。 这样一来,您就可以从远程计算机上的jconsole访问WildFly的JMX服务。

翻译自: https://www.javacodegeeks.com/2014/12/my-wiki-remote-jmx-access-to-wildfly-or-jboss-as7-using-jconsole.html

jconsole 使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python写入并获取剪切板内容_python写入并获取剪切板内容

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

C语言函数返回1和返回0究竟哪个好?

基本上,没有人会将大段的C语言代码全部塞入 main() 函数。更好的做法是按照复用率高、耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数。C语言代码的组合千变万化,因此函数的功能可能会比较复杂,不同的…

java向指定文件继续写内容_java 向指定文件写入内容(如文件存在,则先删除再创建;写入如目录不存在,则创建)...

/*** 向指定文件写入内容(如文件存在,则先删除再创建写入)** param content 保存内容* param path 文件完整路径* throws IOException*/public static void save(String content, String path) throws IOException {FileWriter writer null;try {File file new Fi…

java ee4.8下载_在WildFly 8.2中修补焊接3 – Java EE 8的第一个实验RI

java ee4.8下载Java EE 8一直在发展,并且已经提出了几个新的组件JSR。 JSR 365将定义CDI 2.0的规范。 红帽已经开始开发Weld 3的实现原型, Alpha3最近发布了 。 Red Hat的Java EE 8兼容应用服务器将是WildFly,将在其中实现所有不同的技术。 …

乐高ev3搭建图_乐高EV3第一讲,Hello Ev3,搭建机甲战神模型

课程主题认识编程及结构。课程目标1.简单认识 Ev3 的硬件及使用2.学习 Ev3主控自带的功能(最好拿控制器给孩子演示讲解)联系同学们好!从今天开始我们就要进入乐高 EV3的世界,制作更多更酷、更好玩的机器人了!首先老师先来问大家几个基本的问题…

对单片机C语言的一些误用和总结

我觉得语言之所以能称之为语言,它肯定是一种工具一种相互交流相互通信相互传达之间的意图的工具,作为语言那肯定得有自己的语法,要想相互交流肯定得先学好它的语法吧(比如像表达式,函数,循环,指针)我称之为…

JAVA中使用bos做视频上传_JAVA语言之搭建物流BOS项目骨架

本文主要向大家介绍了JAVA语言之搭建物流BOS项目骨架,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。提供pom.xml4.0.0com.itheimabos-parent0.0.1-SNAPSHOTpom父工程4.2.4.RELEASE5.0.7.Final2.3.241.6.61.2.121.2.3org.springframeworksp…

js 使用多态替换条件语句_用多态和组成替换多个条件

js 使用多态替换条件语句用多态替换条件语句是一种众所周知的重构模式。 如果您不熟悉该模式,可以在此处查看 。 但是,一旦类中有多个条件检查所基于的字段,该基本解决方案便会开始崩溃。 我们将研究一些有关如何使用这些可能性的想法。 有很…

python连不上树莓派_树莓派respberry中cmake编译链接python2.7库不成功,求教

本人在树莓派pi3平台上,下载respberry 5.4 lite 编译一个github上的项目,该项目用cmake管理,目前看到 链接库阶段不成功。请教如何调整cmake的链接库目录,或是怎样直接调整生成的makefile,用于连编是一个主动降噪的项目…

java8 camel_WildFly 8的Camel子系统集成了Java EE –入门

java8 camel就在三天前,围绕Thomas Diesler( tdiesler )的团队发布了WildFly-Camel子系统的2.0.0.CR1版本,它允许您将Camel Routes添加为WildFly配置的一部分。 路由可以部署为JavaEE应用程序的一部分。 JavaEE组件可以访问Camel …

php简单网站源码包含数组_PHP无限分级阶梯递归数组排列 以及多层嵌套数组在网页中的解析源码...

数组递归PHP无限分级 将数组递归转化成阶梯型数组 数组中包含数组 使用更方便 查看也很方便,网上找的都不是很好,自己写的才是王道简单的递归 没有什么特别之处 只是自己写的容易理解一点而已!代码在下面$array[0]array(fid>1,top>0,n…

工程师总结:单片机C语言编程心得

一、.H文件与.C文件的关系:迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.H文件,也不知道.H文件到底什么用,与.C文件什么关系。只是最近写键盘程序,参考别人的程序时,发现别人…

在建工地扬尘在线监控系统推荐_vocs在线监控系统安装的法规依据

voc是挥发性有机化合物的简称,在环保监测领域指活泼累得挥发性有机物,具有特殊的刺激性气味,vocs在线监控系统是专门用于监测voc的排放浓度及排放量的。当一个空间内的voc浓度达到一定数值,人们会出现头晕、恶心、呕吐等多种症状&…

jboss默认进程名称_快速指南:剖析JBoss BPM跨进程通信

jboss默认进程名称(文章来宾与北美红帽公司高级解决方案架构师杰伊保拉杰合着) 几周的提示与技巧文章将深入探讨JBoss BPM Suite,特别是有关如何在两个流程之间进行通信的问题。 在深入了解解决方案细节之前,让我们首先约束将要讨…

嵌入式C语言编程——.h文件与.c文件

.h文件与.c文件的关系参考高手的程序时,发现别人写的严格的程序都带有一个“KEY.H”,里面定义了.C文件里用到的自己写的函数,如Keyhit()、Keyscan()等。.H文件就是头文件,估计就是Head的意思吧,这是规范程序结构化设计…

sql between包括两端吗_SQL简单查询

1.SQL简单查询知识点概要&#xff1a;1. 1基本的查询语句&#xff1a;1.1 .1 Select<列明1>,<列明2>1.1.2 From<表名>1.2. SQL运行数据&#xff1a;1.2.1 SQL语句以英文分号(;)结尾。1.2.2列明用英文的单引号&#xff0c;不区分英文的大小写。1.2.3 列明命名…

使用javac编译java源文件_Java种动态加载(一)——java源文件动态编译为class文件...

Java类动态加载(一)——java源文件动态编译为class文件最近在做java动态加载这方面的工作&#xff0c;起初也遇到了很多困难。网上关于这方便的东西很零散&#xff0c;为了便于日后回过头来再看&#xff0c;于是我将这几天的心得体会总结如下。什么情况下会需要用java程序动态的…

gradle构建多模块项目_Gradle入门:创建多项目构建

gradle构建多模块项目尽管我们可以仅使用一个模块来创建一个运行中的应用程序&#xff0c;但有时将我们的应用程序划分为多个较小的模块是比较明智​​的。 因为这是一个相当普遍的用例&#xff0c;所以每个自重的构建工具都必须支持它&#xff0c;Gradle也不例外。 如果Gradl…

python第一条入门程序_Python语言函数代码的执行流程

https://www.xin3721.com/eschool/pythonxin3721/Python语言函数代码的执行流程&#xff0c;为了保证函数的定义先于其首次调用时执行&#xff0c;我们需要知道中语句的执行顺序。执行总是从程序的第一行代码开始的&#xff0c;从上到下&#xff0c;从左到右&#xff0c;按顺序…

嵌入式C中,全局变量滥用的后果竟如此严重?

说起全局变量&#xff0c;就不得不提到“全局变量&#xff0c;局部变量&#xff0c;静态全局变量&#xff0c;静态局部变量”&#xff0c;这些都是编程语言中的基本概念。变量分为局部与全局&#xff0c;局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局…