java可以利用编写mbeans来暴露很多程序指标,jdk自己也有很多指标,例如内存使用以及划分。很多小伙伴都表示这些值不少jstat就可以获取查看的吗,ssh登录上去就可以,也很方便。jstat确实不错,但是他在内存的信息暴露上是缺失的,没有直接内存的使用。在现在的程序中,直接内存的使用已经不是什么稀有操作了。我们应该如何查看呢?

jmx暴露了这个指标。

很多程序的指标也在这里暴露,例如spark等等,这里不在列举jmx的优点。

为什么要动态开启

主要原因有以下两个:

jconsole可以本地attach获取数据,这个是不需要单独开启端口,只要是本机就可以,这样带来了一个很大的麻烦是图形界面,我们的跑的linux系统其实大部分是没有图形界面的,总不能为此再安装一个图形界面,到时候用vnc等工具远程上去查看吧。jconsole也支持远程模式,通过开启端口,找个有客户端的机器进行连接,也可以获取数据。但是需要在jvm参数启动的时候就开启服务。

-Dcom.sun.management.jmxremote

-Djava.rmi.server.hostname=xx

-Dcom.sun.management.jmxremote.port=xx

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.authenticate=false

很多程序运行的信息很难重现,现在遇到的现象如何没有足够的信息,也不知道什么操作可以成功复现出来。例如现在java进程内存用了5g,其余的空间都比较小,那么到底是jvm层面有一定的内存泄漏还是直接内存的使用。这个成了一个不可推测的地方,如果当时没有开启,那么给排查问题一定会带来很多的烦恼。

动态特性

以上问题在java7中其实有了解决,但是很多时候并不在意。

jcmd带来了动态开启jmx的能力。

jcmd本身是一个命令行,这样就非常方面ssh到机器上操作,不需要依赖什么图形环境,给开启带来了一定的便利性,jcmd可以通过和java进程交互,直接开启java进程的端口

jcmd pid ManagementAgent.start jmxremote.port=9999 jmxremote.ssl=false jmxremote.authenticate=false

在jconsole登录的时候选择远程进程,通过ip:port就可以连接成功。

扩展

除了以上的方式,我们是不是有其他手段也可以做到呢?

我们可以选择javaagent的模式,编写代码读取jmx,可以通过动态attach的模式以类似http等方式进行暴露。这个可以参考prometheus的jmx_exporter。但是开源版本并没有支持动态attach。这个改造并不难,编写agentmain,然后写个attach程序即可。如果想试试的可以进行简单改造。

小结

注意jmx的能力是要比其他的工具暴露多一些的,当不满足时,这些都是我们可以使用的方法。

java jmx 开启_动态开启jmx服务相关推荐

  1. java service包_利用 javaService 发布服务(jar包)

    jar在java中作为一种项目的发布形式比较普遍,往往为了容易管理更需要作为一种系统服务发布--起码服务器重启了不用人工去重新打开你所以往运行的jar文件. 这里简单的介绍下怎么将jar发布到winN ...

  2. 硬件nat关闭还是开启_路由器开启NAT和防火墙功能,性能会下降吗?

    最近在思考一个问题,图书馆里书越来越多,书店的书也越来越多,人类的问题非但没有减少,反而越来越多? 我从事计算机网络行业,谈谈我的观点. 计算机网络技术发展特别快,有些技术从诞生到消失可能只有几年的时 ...

  3. java jmx 监控_利用VisualVm和JMX远程监控Java进程

    在前一篇文章里我们发现通过jstatd + VisualVm的方式,不能获得Java进程的CPU.线程.MBean信息,这时JMX就要登场了. 自Java 6开始,Java程序启动时都会在JVM内部启 ...

  4. java验证码 memcache_java连接开启了sasl的memcache服务

    java连接开启了sasl的memcache服务 public class Xmemcache { public static void main(String[] args) { // TODO A ...

  5. Dubbo 3.0 - 开启下一代云原生微服务

    作者 | 郭浩(项升)  阿里巴巴经济体 RPC 框架负责人 **导读:**本文整理自作者于 2020 年云原生微服务大会上的分享<Dubbo3.0 - 开启下一代云原生微服务>,主要介绍 ...

  6. 使用JMX透过防火墙远程监控tomcat服务

    为什么80%的码农都做不了架构师?>>>    JDK的bin目录下有jvisualvm或jconsole可以监控本地和远程jvm实例的运行动态(包括cpu,内存等), 对于性能分析 ...

  7. jmx 替代_使用JMX作为Ganglia的现代替代品进行CLDB监视

    jmx 替代 有许多选项可用于监视MapR集群的性能和运行状况. 在本文中,我将介绍使用Java管理扩展(JMX)监视CLDB的鲜为人知的方法. 据最受尊敬的MapR数据工程师之一,Akihiko K ...

  8. linux远程开启不挂起的服务

    解决Linux关闭终端(关闭SSH等)后运行的程序自动停止 λ nohup --help Usage: nohup COMMAND [ARG]...or: nohup OPTION Run COMMA ...

  9. MySQL:动态开启慢查询日志(Slow Query Log)

    前言 在开发中,高效能的程序 也包括 高效能的查询,所以优化SQL也是程序员必要技能之一.要优化就必须要有慢日志记录才可以知道哪些查询慢,然后反向去修改 慢日志设置方式 写入文件 写入数据库 实践操作 ...

最新文章

  1. 剑指 offer set 22 数组中的逆序数
  2. 无法创建接口的实例_什么是接口?
  3. windows7电脑删除文件特别慢的解决方法
  4. 操作系统之进程管理:9、进程互斥的硬件实现方法
  5. 三大性质总结:原子性,有序性,可见性
  6. 下载软件的临时文件思路和实现
  7. Java基础篇:如何使用continue语句
  8. Cortex-M开发板密码登陆界面
  9. Spyder汉化(python汉化)
  10. Connection terminated as request was larger than XXX
  11. 米家扫地机器人充满电需要多长时间_【米家智能扫地机器人使用总结】APP|充电|电量|滚刷|厚度_摘要频道_什么值得买...
  12. ReDet A Rotation-equivariant Detector for Aerial Object Detection 论文学习
  13. Redis异地多活原理简介
  14. c++学习:多线程;顺序容器;智能指针
  15. 如何修改CAD制图时光标尺寸大小?
  16. 通信原理_2 确定信号分析
  17. IPD(集成产品开发)文一
  18. [转载]关于中文乱码问题的一些解决方案和经验
  19. 解压chm后由hhc生成html索引页面
  20. C++11 Type-rich编程

热门文章

  1. 【线性代数】Linear Algebra Big Picture
  2. 解决Ubuntu没有wifi图标的问题
  3. 怎样写出引人注目的求职简历?
  4. X10SRA以及X10SRA-F主板启动针脚在先马黑洞机箱上的插法
  5. wegame饥荒一直登录中_饥荒联机版:这些好用的模组你都添加了吗?
  6. 想用情书感动前女友的傻小子
  7. android下网关路由设置,爱快路由网关到网关配置open***
  8. InfluxDB数据库
  9. 图像处理工具如何正确的颜色和对比度
  10. java事务四大特性ACID