● 启用JBoss JMX远程访问的身份验证:
在目录%JBoss_Home%/server\default\deploy 下找到文件 jmx-jboss-beans.xml,在该文件的大约21-23行,找到
<!--UNCOMMENT THIS <property name="securityDomain">jmx-console</property> -->去掉注释,修改为:
<property name="securityDomain">jmx-console</property>
JBoss 默认的用户名为:admin,密码为:admin。用户的访问权限为:JBossAdmin,HttpInvoker。
如果要修改用户名和密码,可以在目录%JBoss_Home%/server\default\conf\props 下找到文件 jmx-console-roles.properties,在里面进行修改即可。
如果要修改用户的访问权限,可以在目录%JBoss_Home%/server\default\conf\props 下找到文件 jmx-console-users.properties ,在里面进行修改即可。
JBoss JMX 远程访问的默认端口为:1090。.如果要修改该端口,可以在目录
%JBoss_Home%/server\default\conf\bindingservice.beans\META-INF 下找到文件 bindings-jboss-beans.xml ,大约在244 行,进行修改即可。
● 启用Tomcat JMX 远程访问身份验证:
因为Tomcat 是通过JDK 进行JMX 远程管理的,所以要在JDK 中添加username,password 和 访问权限。
找到目录 %JAVA_HOME%\jre\lib\management 下的文件 jmxremote.password.template 和 jmxremote.access。
jmxremote.password.template 是一个模板文件,提供了如何创建用户名和密码的格式,在最后可以看到JDK 提供了两个用户名和密码,只不过是通过“#”注释掉了,
然后再改目录下新建一个 jmxremote.password 文件,在这个新建的文件里添加用户名和密码,例如:admin admin。
jmxremote.access 文件是配置用户访问权限的,在最后添加 admin readonly 或 admin readwrite。
再在目录%TOMCAT_HOME%\bin 下找到 文件 catalina.bat,编辑这个文件,在里面添加:
set JAVA_OPTS=%JAVA_OPTS% -Djava.rmi.server.hostname=192.168.100.126
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port="1090" // 远程访问端口
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate="true" // 身份验证
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl="false" //SSL验证
在window下,现需要jdk装在NTFS文件系统下,选中文件,点右键“属性”-〉安全,点“高级”,去掉“从父项继承....”,弹出窗口中选“删除”,这样删除了所有访问权限。再选“添加”-〉高级,“立即查找”,选中你的用户,例administrator,点“确定",“确定"。来到权限窗口,勾选"完全控制",点"确定",OK了。
● 通过jconsole 监控 JBoss/Tomcat
打开%JAVA_HOME%\bin\jconsole.exe 在“远程进程”中输入“192.168.0.88:1090”,用户名“admin”,口令 “admin”,就可监控 IP 为“192.168.0.88” 的JBoss/Tomcat 服务器。
● 通过Java 程序获得JBoss/Tomcat 中的信息
package com.demo.jmx.jconsole;
import java.lang.management.MemoryUsage;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class JMXMonitor {
private static final String URL = "service:jmx:rmi:///jndi/rmi://127.0.0.1:1090/jmxrmi";
protected MBeanServerConnection mbsc;
private String path;
private Integer maxActiveSessions;
private Integer activeSessions;
private Integer sessionCounter;
private long maxMemory;
private long committedMemory;
private long usedMemory;
private String protocolPort;
private Integer maxThreads;
private Integer currentThreadCount;
private Integer currentThreadsBusy;
public JMXMonitor() throws Exception{
JMXServiceURL serviceURL = new JMXServiceURL(URL);
Map<String,String[]>map = new HashMap<String,String[]>();
String[] credentials = new String[] { "admin" , "admin" };
map.put("jmx.remote.credentials", credentials);
JMXConnector connector = JMXConnectorFactory.connect(serviceURL, map);
mbsc = connector.getMBeanServerConnection();
}
public Map<?,?>createSessionCounter()throws Exception{
String objectName = "jboss.web:type=Manager,path=/*,host=localhost"; //JBoss
//String objectName1 = "Catalina:type=Manager,context=/*,host=localhost"; //Tomcat
ObjectName managerObjName = new ObjectName(objectName);
Set<ObjectName> set=mbsc.queryNames(managerObjName, null);
Map<String,JMXMonitor> map = new HashMap<String,JMXMonitor>();
for (ObjectName obj:set){
if(objectName.indexOf(objectName)!= -1)
path = obj.getKeyProperty("path");
if(path.indexOf(objectName)!= -1)
path = obj.getKeyProperty("context");
ObjectName objname = new ObjectName(obj.getCanonicalName());
maxActiveSessions = (Integer)mbsc.getAttribute( objname, "maxActiveSessions");
activeSessions = (Integer)mbsc.getAttribute( objname, "activeSessions");
sessionCounter = (Integer)mbsc.getAttribute( objname, "sessionCounter");
map.put(path, this);
}
return map;
}
public void createHeapMemoryCounter() throws Exception{
String objectName = "java.lang:type=Memory";
ObjectName heapObjName = new ObjectName(objectName);
CompositeDataSupport cds = (CompositeDataSupport)mbsc.getAttribute(heapObjName, "HeapMemoryUsage");
MemoryUsage heapMemoryUsage = MemoryUsage.from(cds);
maxMemory = heapMemoryUsage.getMax();
committedMemory = heapMemoryUsage.getCommitted();
usedMemory = heapMemoryUsage.getUsed();
}
public Map<?,?>createThreadPoolCounter() throws Exception{
String objectName = "jboss.web:type=ThreadPool,name=*"; //JBoss
//String objectName = "Catalina:type=ThreadPool,name=*"; //Tomcat
ObjectName threadPoolObjName = new ObjectName(objectName);
Set<ObjectName> set=mbsc.queryNames(threadPoolObjName, null);
Map<String,JMXMonitor> map = new HashMap<String,JMXMonitor>();
for (ObjectName obj:set){
protocolPort = obj.getKeyProperty("name");
ObjectName objname=new ObjectName(obj.getCanonicalName());
maxThreads = (Integer)mbsc.getAttribute( objname, "maxThreads");
currentThreadCount = (Integer)mbsc.getAttribute( objname, "currentThreadCount");
currentThreadsBusy = (Integer)mbsc.getAttribute( objname, "currentThreadsBusy");
map.put(protocolPort, this);
}
return map;
}
public String getPath() {
return path;
}
public Integer getMaxActiveSessions() {
return maxActiveSessions;
}
public Integer getActiveSessions() {
return activeSessions;
}
public Integer getSessionCounter() {
return sessionCounter;
}
public long getMaxMemory() {
return maxMemory;
}
public long getCommittedMemory() {
return committedMemory;
}
public long getUsedMemory() {
return usedMemory;
}
public String getProtocolPort() {
return protocolPort;
}
public Integer getMaxThreads() {
return maxThreads;
}
public Integer getCurrentThreadCount() {
return currentThreadCount;
}
public Integer getCurrentThreadsBusy() {
return currentThreadsBusy;
}
}
测试类
package com.demo.jmx.jconsole;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class JMXTest {
public static void main(String[] args) throws Exception{
JMXMonitor monitor = new JMXMonitor();
Map<?,?>sessionMap = monitor.createSessionCounter();
Set<?>pathSet = sessionMap.keySet();
Iterator<?>it = pathSet.iterator();
while(it.hasNext()){
String path = (String)it.next();
System.out.println("path:" + path);
JMXMonitor seesionMonitor = (JMXMonitor)sessionMap.get(path);
System.out.println("activeSessions:" + seesionMonitor.getActiveSessions());
System.out.println("maxActiveSessions:" + seesionMonitor.getMaxActiveSessions());
System.out.println("activeSessions:" + seesionMonitor.getSessionCounter());
System.out.println();
}
System.out.println("#######################################################");
monitor.createHeapMemoryCounter();
long committedMemory = monitor.getCommittedMemory();
long maxMemory = monitor.getMaxMemory();
long usedMemory = monitor.getUsedMemory();
System.out.println("committedMemory:" + committedMemory);
System.out.println("maxMemory:" + maxMemory);
System.out.println("usedMemory:" + usedMemory);
System.out.println("#######################################################");
Map<?,?> threadPoolMap = monitor.createThreadPoolCounter();
Set<?> protocolPortSet = threadPoolMap.keySet();
Iterator<?>it1 = protocolPortSet.iterator();
while(it1.hasNext()){
String protocolPort = (String)it1.next();
System.out.println("protocol-Port:" + protocolPort);
JMXMonitor threadPoolMonitor = (JMXMonitor)threadPoolMap.get(protocolPort);
System.out.println("currentThreadCount:" + threadPoolMonitor.getCurrentThreadCount());
System.out.println("currentThreadsBusy:" + threadPoolMonitor.getCurrentThreadsBusy());
System.out.println("maxThreads:" + threadPoolMonitor.getMaxThreads());
System.out.println();
}
}
}
相关推荐
jmx 实现远程连接tomcat jmx(Java Management Extensions)是一种Java技术,用于监控和管理Java应用程序。...通过以上步骤,我们可以成功实现jmx远程连接tomcat,实现在远程监控tomcat的应用程序。
首先,WebLogic是由Oracle公司提供的一个全面的企业级Java应用服务器,它支持JMX来暴露管理接口,允许管理员远程监控服务器的状态、配置以及执行管理操作。通过JMX,你可以获取到WebLogic服务器的运行时信息,如JVM...
- 在`%TOMCAT_HOME%\bin\catalina.sh`文件中,修改`JAVA_OPTS`环境变量,添加JMX远程监控所需的参数: ```bash JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote.port=1090 -...
我们的示例展示了如何使用JMX框架和RMI连接方式来实现远程监控和管理应用程序。JMX框架提供了一种灵活、可扩展和高效的方式来管理和监控应用程序,而RMI连接方式允许远程客户端访问MBean提供的管理功能。
java jmx 远程监控
当我们谈论"jboss远程调用JMX"时,我们关注的是如何通过网络从一个JMX客户端连接到运行在JBoss服务器上的JMX服务,以便进行远程管理和监控。 首先,我们需要了解JMX的基本概念。MBean是JMX的核心,它是一个Java对象...
### JVisualVM远程监控Linux服务器上的Tomcat #### 一、引言 随着分布式系统的发展,对于部署在不同服务器上的应用程序进行性能监控变得尤为重要。Java应用程序(如Tomcat)的性能监控是确保服务稳定性和可扩展性...
在Tomcat的`conf/server.xml`文件中,找到`<Server>`标签,在其中添加一个`Service`,并配置一个`Connector`来启用RMI(Remote Method Invocation),以便远程访问JMX。示例如下: ```xml ...
在运维过程中,JMX(Java Management Extensions)监控是一个非常重要的工具,可以帮助我们实时查看和管理应用程序的状态,以及诊断和解决问题。本文将详细介绍如何使用 JMX 监控 TongWeb7。 首先,要开启 JMX 监控...
- 支持多种远程监控协议,包括JPDA (Java Platform Debugger Architecture)、JMX (Java Management Extensions)等。 **知识点三:安装和配置JProfiler** 1. **下载安装包** - 用户需要从官方网站下载适用于Windows...
jmx监控ActiveMQ监控 jmx(Java Management Extensions)是一种Java技术,为Java应用程序提供了管理和监控的功能。ActiveMQ是Apache软件基金会下的一个开源消息队列系统,提供了高效、可靠的消息传递服务。在生产...
在本场景中,我们关注的是如何利用JMX来远程监控服务器上的关键资源,如CPU利用率、内存状态、已加载类的数量以及堆内存信息。下面将详细探讨这些知识点。 一、JMX 概述 JMX 是一种服务导向架构,它定义了管理和...
jvisualvm 远程访问 Linux ...使用 jvisualvm 远程访问 Linux 环境中的 Tomcat 需要安装和配置 jdk 和 Tomcat,然后使用 jvisualvm 的 JMX 方法或 jstatd 方法进行监控,最后添加 Visual GC 插件以获取更多的监控信息。
当JMX图标变为绿色,表明Tomcat监控配置成功。 对于MySQL的监控,你需要在B机器上创建一个特定的Zabbix Agent配置文件`userparameter_mysql.conf`,并在其中定义监控MySQL的参数。接着,通过MySQL客户端创建一个...
这个库通常用于开发远程监控和管理应用,或者在客户端进行JMX连接。 `jmxri-1.2.1.jar` 是JMX运行时实现(Runtime Implementation)的组件,它提供了Java虚拟机内部的MBean服务器实现。当JMX API在Java应用程序中...
- **配置Tomcat监控**:对于Tomcat这类Java应用,还需要下载JMX-Remote.jar并放置在Tomcat的lib目录下。 #### 四、实践操作指南 1. **安装准备**: - 确认服务器已安装JDK。 - 下载并解压Zabbix软件包。 - ...
1. **启用JMX**:在Tomcat的`conf/server.xml`配置文件中,我们需要添加JMX远程访问的配置。这通常意味着在`<Server>`标签内添加`<Service>`和`<Connector>`,并设置相应的端口和访问权限。 2. **安装JMX连接器**:...
**Tomcat开启远程JMX连接方式详解** Java Management Extensions (JMX) 是Java...通过JMX,你可以使用各种工具(如JConsole、VisualVM、JMX Console插件等)进行远程监控,以便更好地管理和优化Tomcat服务器的性能。
云服务上的tomcat监控使用到的jar包,需要的可以直接下载,注意tomcat的版本需要和jar包的版本对应
同时,掌握Tomcat的监控工具,如catalina.sh脚本和JMX(Java Management Extensions)。 这些资料将涵盖从编写Java代码、集成开发环境的使用,到服务器配置和应用部署的全过程。通过深入学习和实践,你可以成为一名...