1、在创建JMX监控连接之前,首先需要了解一些JBoss的基本概念:
(1)standalone和domain模式:
JBOSS应用服务器可以运行于standalone或者domain(集群)模式下。standalone是单机模式,domain是集群模式。采用什么模式取决于实际需求,二者皆有优缺点。
不管采用什么模式,都可以通过JMX实现远程连接,但是连接配置是不同的。
(2)需要修改classpath参数:
如果要创建远程JMX连接,需要通过classpath参数引入合适的类库。(本地连接不需要,但是远程连接,此步骤不能省略)
(3)JConsole
如果使用JConsole,则很简单,Jboss自带了JConsole的脚本文件:$JBOSS_HOME/bin/jconsole.sh,可以直接通过JConsole访问JBOSS CLI,如下:
(4)VisualVM
如果需要使用VisualVM,需要从akquinetblog下载一个封装好的脚本,这个脚本包括了JBOSS7和JBOSS8必须的类库。在运行VisualVM之前需要调整VISUALVM路径,如下:
2、duang~duang~开始创建JMX监控连接
(1)本地进程监控(适用于standalone和domain模式)
通过JConsole或者VisualVM连接本地进程,不需要配置classpath。但是如果需要使用集成了JBoss CLI的JConsole进行监控,则最好采用前面提到已封装好的jconsole.sh。
因为在同一台主机上,所以不需要身份验证。启动JConsle或者VisualVM,从进程列表中选择需要监控的JAVA进程,如下:
(2)通过密码验证和内置管理端口实现的远程监控(只适用于standalone模式)
这种方式主要适用于监控程序和JBoss应用服务器位于不同主机上的情况,可以通过JBoss的内置管理端端口实现远程连接。
第一步,确认客户端可以访问JBoss内置管理端口。
第二步,因为内置管理端口默认绑定到127.0.0.1,不能用于远程连接,所以需要所绑定的IP地址,可以修改属性jboss.bind.address.management,如下:
1
|
$ bin/standalone.sh -Djboss.bind.address.management=IP_ADDRESS
|
也可以通过JBOSS CLI($JBOSS_HOME/bin/jboss-cli.sh)使之长久生效,如下:
1
|
#/
interface
=management/:write-attribute(name=inet-address,value=IP_ADDRESS)
|
虽然也可以在domain模式下调用这个命令,但是domain模式下的JMX远程连接并不适用于内置管理端口,对于domain模式下的远程连接,可以参看后文。
第三步,重启以生效,管理端口默认为9999。
第四步,创建管理用户。为了通过远程主机的密码认证,需要通过$JBOSS_HOME/bin/add-user.sh脚本创建管理用户,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
$ bin/add-user.sh
What type of user
do
you wish to add?
a) Management User (mgmt-users.properties)
b) Application User (application-users.properties)
(a): a
Enter the details of the
new
user to add.
Realm (ManagementRealm) :
Username : test
Password :
Re-enter Password :
About to add user
'test'
for
realm
'ManagementRealm'
Is
this
correct yes/no? yes
Added user
'test'
to file
'/home/jboss/standalone/configuration/mgmt-users.properties'
Added user
'test'
to file
'/home/jboss/domain/configuration/mgmt-users.properties'
Is
this
new
user going to be used
for
one AS process to connect to another AS process e.g. slave domain controller?
yes/no? yes
To represent the user add the following to the server-identities definition <secret value=
"cWF6IUAjMTIz"
/>
|
第五步,创建远程连接,录入管理用户和密码,如下:
1
|
service:jmx:remoting-jmx:
//HOST:9999
|
(3)通过密码验证和远程端口实现的远程监控(适用于standalone和domain模式)
第一步,确认端口可以访问。
第二步,修改绑定IP,因为Jboss应用服务器默认绑定IP地址:127.0.0.1,为了改变所绑定的IP地址,需要在启动JBoss应用服务器的时候使用-b,如下:
1
|
$ bin/standalone.sh -b IP_ADDRESS
|
也可以通过通过JbossCLI($JBOSS_HOME/bin/jboss-cli.sh)使该修改长期生效,如下:
1
|
# /
interface
=
public
/:write-attribute(name=inet-address,value=IP_ADDRESS)
|
第三步,重启应用服务器,默认的远程端口是4447,集群应用服务器默认端口偏移量为150,所以第二台应用服务器的端口是4597,第三台是4747,以此类推。
第四步,创建应用用户。如果需要通过远程端口访问,需要创建应用用户,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
$ bin/add-user.sh
What type of user
do
you wish to add?
a) Management User (mgmt-users.properties)
b) Application User (application-users.properties)
(a): b
Enter the details of the
new
user to add.
Realm (ApplicationRealm) :
Username : test
Password :
Re-enter Password :
What roles
do
you want
this
user to belong to? (Please enter a comma separated list, or leave blank
for
none)[ ]:
About to add user
'test'
for
realm
'ApplicationRealm'
Is
this
correct yes/no? yes
Added user
'test'
to file
'/home/goldmann/jira/TORQUE-1039-remote-jmx/jboss-as-7.1.2.Final/standalone/configuration/application-users.properties'
Added user
'test'
to file
'/home/goldmann/jira/TORQUE-1039-remote-jmx/jboss-as-7.1.2.Final/domain/configuration/application-users.properties'
Added user
'test'
with roles to file
'/home/goldmann/jira/TORQUE-1039-remote-jmx/jboss-as-7.1.2.Final/standalone/configuration/application-roles.properties'
Added user
'test'
with roles to file
'/home/goldmann/jira/TORQUE-1039-remote-jmx/jboss-as-7.1.2.Final/domain/configuration/application-roles.properties'
Is
this
new
user going to be used
for
one AS process to connect to another AS process e.g. slave domain controller?
yes/no? yes
To represent the user add the following to the server-identities definition <secret value=
"cWF6IUAjMTIz"
/>
|
第五步,使用远程端口访问的方式,就不能再使用内置默认管理端口,不能在一台主机上同时使用内置管理端口和远程端口,所以需要关闭管理端口,standalone模式下:
1
|
#/subsystem=jmx/remoting-connector=jmx/:write-attribute(name=use-management-endpoint,value=
false
)
|
但是Jboss CLI存在bug,domain模式不能使用这个方式,但是可以在domain.xml中进行设置(full模块中):
1
|
<remoting-connector use-management-endpoint=
"false"
/>
|
第六步,重启应用服务器。
第七步,创建JMX连接,录入之前创建的用户和密码,如下:
1
|
service:jmx:remoting-jmx:
//HOST:4447
|
(备注,domain模式下要使IP长期生效,也可以在$JBOSS_HOME/domain/configuration/host.xml中修改IP地址)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<interfaces>
<
interface
name=
"management"
>
<inet-address value=
"${jboss.bind.address.management:172.25.111.8}"
/>
</
interface
>
<
interface
name=
"public"
>
<inet-address value=
"${jboss.bind.address:172.25.111.8}"
/>
</
interface
>
<
interface
name=
"unsecure"
>
<!-- Used
for
IIOP sockets in the standard configuration.
To secure JacORB you need to setup SSL -->
<inet-address value=
"${jboss.bind.address.unsecure:172.25.111.8}"
/>
</
interface
>
</interfaces>
|