前面两篇JMX远程监控Tomcat服务器是没配置密码的,下面介绍在Tomcat监控时配置用户密码。

来源博客:http://blog.csdn.net/fengshizty

具体Tomcat地址:http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html#Enabling_JMX_Remote

Note: This syntax is for Microsoft Windows. The command has to be on the same line. It is wrapped to be more readable. If Tomcat is running as a Windows service, use its configuration dialog to set java options for the service. For un*xes remove"set " from beginning of the line.

set CATALINA_OPTS=-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=%my.jmx.port%-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false
  1. If you require authorization, add and change this :

      -Dcom.sun.management.jmxremote.authenticate=true-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access
    
  2. edit the access authorization file $CATALINA_BASE/conf/jmxremote.access :
    monitorRole readonly
    controlRole readwrite
    
  3. edit the password file $CATALINA_BASE/conf/jmxremote.password :
    monitorRole tomcat
    controlRole tomcat
    

    Tip: The password file should be read-only and only accessible by the operating system user Tomcat is running as.

其内容大概如下:

1、编辑Tomcat/bin中的catalina.bat。如果配置权限,需要将autenticate设置为true,将1中的下面两行代码添加到最上面一行,注意:这些所有的命令必须在一行!。

2、在Tomcat/conf目录下新建两个文件:jmxremote.accessjmxremote.password

第一个文件存的是角色信息,第二个存放的是密码信息(可修改)。

配置完上面信息后:我们启动tomcat时,Tomcat出现一闪而过,上面提示的大概意思是权限问题。

解决的办法是:选中Tomcat文件夹,点右键 -->“属性”-->“安全”--> 点“高级”--> 点“更改权限”--> 去掉“从父项继承....”--> 弹出窗口中选“删除”,这样就删除了所有访问权限。再选“添加”--> “高级”--> “立即查找”,选中你的用户(或用户组,如果选用户不行那就选用户组),例administrator(当前电脑的权限),点“确定",“确定"。来到权限项目窗口,勾选“完全控制”,点“确定”,重启就可以了。

实现:

没有密码时,我们采用JMXConnectorFactory工厂类的 connect(JMXServiceURL serviceURL) 创建到位于给定地址的连接器服务器的连接。 设置密码后需connect(JMXServiceURL serviceURL, Map<String,?> environment) ,

设置map存放environment.put("jmx.remote.credentials", credentials);配置信息。

String[] credentials = new String[] { "monitorRole", "tomcat" };

其具体实现如下:

package pyc.jvm.monitor;import java.io.IOException;
import java.lang.management.ClassLoadingMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.lang.management.OperatingSystemMXBean;
import java.lang.management.ThreadMXBean;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanServerConnection;
import javax.management.ReflectionException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;/*** 创建时间:2014-12-5 上午11:06:34* * @author zhangtianyou* @version 2.2*/public class JMXTest3 {private final static String SERVICE_1 = "service:jmx:rmi:///jndi/rmi://192.168.85.54:8787/jmxrmi";/*** @param args*/public static void main(String[] args) {// 10秒调用一次Timer timer = new Timer();timer.schedule(new JMXTest3().new MonitorTask(SERVICE_1), 0, 10000);}private class MonitorTask extends TimerTask {private String service;public MonitorTask(String service) {this.service = service;}@Overridepublic void run() {JMXmonitor(service);}}private static void JMXmonitor(String service) {JMXConnector jmxConnector = null;try {JMXServiceURL ServiceURL = new JMXServiceURL(service);Map<String, String[]> environment = new HashMap<String, String[]>();// 用户名密码,在jmxremote.password文件中的密码String[] credentials = new String[] { "monitorRole", "tomcat" };environment.put("jmx.remote.credentials", credentials);jmxConnector = JMXConnectorFactory.connect(ServiceURL, environment);MBeanServerConnection mBeanServerConnection = jmxConnector.getMBeanServerConnection();// 获取MemoryMXBeanSystem.out.println("\nMemory");MemoryMXBean memoryMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection,ManagementFactory.MEMORY_MXBEAN_NAME,MemoryMXBean.class);MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();System.out.println("heapMemoryUsage :");System.out.println("committed = "+ convertKB(heapMemoryUsage.getCommitted()));System.out.println("init = " + convertKB(heapMemoryUsage.getInit()));System.out.println("max = " + convertKB(heapMemoryUsage.getMax()));System.out.println("used = " + convertKB(heapMemoryUsage.getUsed()));MemoryUsage nonHeapMemoryUsage = memoryMXBean.getNonHeapMemoryUsage();System.out.println("\nnonHeapMemoryUsage :");System.out.println("committed = "+ convertKB(nonHeapMemoryUsage.getCommitted()));System.out.println("init = "+ convertKB(nonHeapMemoryUsage.getInit()));System.out.println("max = "+ convertKB(nonHeapMemoryUsage.getMax()));System.out.println("used = "+ convertKB(nonHeapMemoryUsage.getUsed()));// 获取 ThreadMXBeanSystem.out.println("\nThread");ThreadMXBean threadMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection,ManagementFactory.THREAD_MXBEAN_NAME,ThreadMXBean.class);System.out.println("ThreadCount = " + threadMXBean.getThreadCount());System.out.println("DaemonThreadCount = "+ threadMXBean.getDaemonThreadCount());System.out.println("PeakThreadCount = "+ threadMXBean.getPeakThreadCount());System.out.println("CurrentThreadCpuTime = "+ threadMXBean.getCurrentThreadCpuTime());System.out.println("CurrentThreadUserTime = "+ threadMXBean.getCurrentThreadUserTime());System.out.println("\nClassLoading");ClassLoadingMXBean classLoadingMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection,ManagementFactory.CLASS_LOADING_MXBEAN_NAME,ClassLoadingMXBean.class);// 当前加载到Java虚拟机中类的数量System.out.println("LoadedClassCount = "+ classLoadingMXBean.getLoadedClassCount());// Java 虚拟机开始执行到目前已经加载的类的总数。System.out.println("TotalLoadedClassCount = "+ classLoadingMXBean.getTotalLoadedClassCount());// Java 虚拟机开始执行到目前已经卸载的类的总数。System.out.println("UnloadedClassCount = "+ classLoadingMXBean.getUnloadedClassCount());System.out.println("\nCpu");OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.newPlatformMXBeanProxy(mBeanServerConnection,ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME,OperatingSystemMXBean.class);System.out.println("AvailableProcessors = "+ operatingSystemMXBean.getAvailableProcessors());double ratio = 0.0;long start = System.currentTimeMillis();long startC;try {startC = (long) mBeanServerConnection.getAttribute(operatingSystemMXBean.getObjectName(),"ProcessCpuTime");try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}long end = System.currentTimeMillis();long endC = (long) mBeanServerConnection.getAttribute(operatingSystemMXBean.getObjectName(),"ProcessCpuTime");int availableProcessors = operatingSystemMXBean.getAvailableProcessors();ratio = (endC - startC) / 1000000.0 / (end - start)/ availableProcessors;} catch (AttributeNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (InstanceNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (MBeanException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (ReflectionException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}System.out.println("CUP使用率" + round(ratio * 100) + "%");} catch (MalformedURLException e) {e.printStackTrace();System.out.println("非法的ServiceURL");} catch (IOException e) {e.printStackTrace();} finally {try {if (jmxConnector != null) {jmxConnector.close();}} catch (IOException e) {e.printStackTrace();}}}private static String convertKB(long src) {if (src <= 0L) {return "0KB";}double conversrc = src / 1024 / 1024;return round(conversrc) + "MB";}private static float round(double src) {return (float) (Math.round(src * 100)) / 100;}
}

嵌套在JavaEE中的效果如下:

来源博客:http://blog.csdn.net/fengshizty

拿了张工作图,不会侵权吧。。。

JMX实现远程服务器Tomcat系统监控之三相关推荐

  1. 消息服务器 负载均衡,(33)负载均衡上报Host主机信息API(LoadBalanceAgent部分)-【Lars-基于C++负载均衡远程服务器调度系统教程】...

    [Lars教程目录] 7) 负载均衡上报Host主机信息API(V0.4) 7.1 proto通信协议定义 syntax = "proto3"; package lars; /* ...

  2. xp如何开启远程服务器,XP系统打开远程桌面与修改3389端口的操作步骤

    3389端口是Windows 2000(2003) Server远程桌面的服务端口,通过这个端口,用"远程桌面"等连接工具来连接到远程的服务器,如果连接上了,输入系统管理员的用户名 ...

  3. scada系统远程服务器,SCADA系统的功能有哪些

    标签:服务器(387)plc(2733) 数据采集与监视控制(SCADA)系统是SupervisoryControlAndDataAcquisiTIon的英文缩写,国内流行叫法为监控组态软件.从字面上 ...

  4. linux谁动了我的服务器,linux系统监控之谁动了我的服务器?

    各位后端大佬在日常工作中应该都有遇到过服务器误操作,误删文件,修改错了配置文件等情况.有时候一时可能发现不了失误,等到业务系统报错时才发现失误了,有时候报错的不明显还要排错,或者说某大佬删库跑路但是拥 ...

  5. 项目 调度 服务器,(2)项目构建(Reactor部分)【Lars-基于C++负载均衡远程服务器调度系统教程】...

    [Lars教程目录] 二.项目目录构建 ​ 首先在一切开始之前,我们应该将最基本的项目架构创建出来. 1)创建Lars代码总目录 $cd ~/ $mkdir Lars 创建一个模块Lars_react ...

  6. 日常问题 - 远程服务器运行Tomcat出现卡顿阻塞

    问题描述: 远程服务器Tomcat容器运行一个WEB项目,浏览器访问时,请求一直得不到响应,并且除此之外没有出现任何异常,像是被阻塞了.查看远程Tomcat窗口,也没有任何报错.鼠标在Tomcat窗口 ...

  7. vs code 如何在服务器打开文件,本地VSCode编辑远程服务器文件

    前言 先说下我的场景:服务器搭设了一系列复杂环境,然后需要使用PHP实现某些功能 选这种远程编辑的原因: 首先PHP打死我也不想装(这个现在是出了VB外最惹人厌的语言了) 然后环境比较复杂,本地装下比 ...

  8. Java实现远程服务器监控,【Java】监控远程服务器JVM

    今天在用JMeter进行测试的时候,发现线程并发量到50的时候会导致阻塞情况,于是需要监控远程JVM,那么如何监控远程JVM呢? 首先,找到启动计量引擎的sh文件,例如我目前的计量引擎启停文件为str ...

  9. 使用JvisualVM无法连接linux远程服务器,错误无法使用service:jmx:rmi:// /jndi/rmi://ip:port/jmxrmi

    前言 在监控java进程,使用JvisualVM连接远程服务器时,正常输入服务器的IP+端口,本来以为可以正常连接的,结果却提示错误无法使用service:jmx:rmi:// /jndi/rmi:/ ...

  10. 服务器账户登录监控系统,服务器账户登录监控系统

    服务器账户登录监控系统 内容精选 换一换 在使用裸金属服务器时,您可能会遇到各种问题,比如远程登录.扩容磁盘.重装操作系统.备份服务器等.为方便您获取这些场景的操作指导,本文提供了常用操作的导航.在您 ...

最新文章

  1. 迁移学习之VGG16和VGG19
  2. java后台post请求调用接口
  3. Linux学习(1)-Linux几个基础命令及文件系统功能和作用
  4. 史上最全中文语料数据集
  5. jzoj3058-火炬手【高精度,暴力】
  6. map与unordered_map
  7. iOS-UIScrollView拉伸效果
  8. R工程化—Rest API 之plumber包
  9. PyTorch1.2安装(Anaconda3 + Python3.6 + cpu版本)
  10. Java测试题及答案(Java干货完整试卷)
  11. 图解机器学习算法(3) | KNN算法及其应用(机器学习通关指南·完结)
  12. c primer plus 第6版 中文版pdf_内功实力再精进 试驾上汽大通V80 PLUS城市版
  13. 取整函数 --- 以Python为例
  14. python图片转换成文字_在python中将图像转换为字节文字 - python
  15. 思翼FM30高频头蓝牙数传连接地面站远距离通信功能
  16. c语言字符大于等于怎么打,c语言大于等于怎么打?
  17. 一文教会你使用R语言和基本统计分析
  18. panic: reflect: reflect.Value.SetUint using value obtained using unexported field(go语言)
  19. 合天网安实验室CTF-解密200-找茬游戏
  20. 安卓学习 Day26:使用自定义视图绘制文本、图像与图形

热门文章

  1. android 转场动画 4.4,Android高级UI开发(二十七)Material Design之转场动画(一)
  2. windows会不会被linux取代,深度Linux系统会取代Windows系统吗?
  3. mybatis update不生效_08. mybatis一级缓存和二级缓存
  4. CS231n李飞飞计算机视觉 卷积神经网络详解下
  5. 【机器学习系列】EM算法第三讲:由Jensen Inequality推导EM算法
  6. 业界常用的技术评估指标和方法,
  7. IBC 2019 五篇文章阅读笔记
  8. 市民云注销账号实名认证还有吗_这可能是全网最详细的注销网易服务的教程了...
  9. 如何在B站读一个深度学习的研究生?
  10. 2020牛客多校训练3 G Operating on a Graph(并查集+链式结构)