排障利器之远程调试与监控 --jmx & remote debug
监控和调试功能是应用必备的属性之一,其手段也是多种多样。
一般地,我们可以通过:线上日志, zabbix, grafana, cat 等待系统做一问题留底,有问题及时报警,从而达到监控效果。
而对于应用的调试,我之前的文章也提到了几个工具,当然,我对于 arthas 是调试赞扬的。请参考: 线上应用调试利器 --Arthas
但有句老话: 一千个人眼里有一千个哈姆雷特!所以,你应该要知道更多的方式。
本文来看看咱们另一个调试调试与监控方式!
1. jmx 怎么样 ?
百科解释: JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
简单来说就是,通过jmx,你可以直接观察到jmx管理的东西,从而达到实时监控的效果!另外,还可以通过远程更改jmx的值,从而达到控制管理作用;
要查看监控效果,最简单的方式,是直接使用 jvisualvm 直接连接到远程进行观察,如下:

如果想要更改 jmx 的值,则还是要写点代码的,进行反射后就可以更改了!
2. jmx 如何开启?
如果你对如上的结果还比较满意,那么,你应该考虑下怎么开启jmx了!
其实很简单,一般借助框架进行操作,而应用自身则配置一个 jmx 端口就行了!
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=
这样开启后,就可以本地连接进行查看了。当然了,如上操作是危险的,请慎重!

另外,我们一般可以多安装两个插件,Mbean 和 Thread Inspector 以便在出现问题时及时查看线程信息!
jmx的输出信息,除了给我们实时监控用外,还可以借助一些第三方工具如grafana进行收集后进行持久化。可视化显示出现!(须借助 jmx_exportor, Prometheus 等工具)
jmx 还可以做什么?
对于线上应用的jvm调优,多半也是可以基于 jmx 做的~
3. remote debug 如何?
remote debug , 看起来有点高大上。至少我自己想来,这种实现方式应该是复杂的!
个人觉得有两个难点:
1. 如何连接到远程进程中debug,关键是远程是以 run 的形式进行的?
2. 远程的代码如何与本地对应?
我们在开发阶段,为什么很容易解决问题?其实,很多时候就是因为可以debug,可以直接跟踪到问题的根源。所以,你懂的,能debug就等于给了你无限的力量!
断点几乎能解决所有的问题。
但是,对于线上应用,你的断点则意味着应用失去响应,可能是事故级操作。所以,还是悠着点~
4. remote debug 如何开启?
同样,如果你觉得这对你还有点用,自然想看下如何开启了。两个步骤!
1. 远程开启调试功能!
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=
2. ide 开户远程 debug!

就ok 了!
接下来,就是debug时间,支持任意断点,包括启动时的断点;
另外,对于临时的代码改动,可以进行即时生效!
需要注意的是,在远程debug时,控制台的输出将是向远程输出,而非向本地输出!
老话:不要让一个bug从我们手中溜走!
排障利器之远程调试与监控 --jmx & remote debug的更多相关文章
- 系统之锹sysdig:Linux服务器监控和排障利器
当你需要追踪某个进程产生和接收的系统调用时,首先浮现在你脑海中的是什么?你可能会想到strace,那么你是对的.你会使用什么样的命令行工具来监控原始网络通信呢?如果你想到了tcpdump,你又作出了一 ...
- 使用java远程调试技术监控代码运行
JAPA介绍 JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系结构的缩写,通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Jav ...
- 使用Clion优雅的完全远程自动同步和远程调试c++
摘要:在linux上用vim写C++的时候,通常用gdb进行调试,不能随心所欲的看代码和跳转代码以及加watch(也有可能是因为我还没有get正确的使用方法).为此我发现Clion可以做到自动同步本场 ...
- IDEA远程调试监控端口
大家知道,线上环境定位问题不是那么简单的,如果有非常完善的日志以及监控系统是不必担心的,但是应对这些并不完善的场景下,IDEA提供了一种远程调试的功能,remote集成了可以远程调试的功能,只需要在你 ...
- IDEA + tomcat 远程调试(JPDA)
一.修改 tomcat 配置,启动远程调试 Linux(bin\catalina.sh) # 将 localhost 改为 0.0.0.0 if [ -z "$JPDA_ADDRESS&qu ...
- Pycharm远程调试
1.在pycharm的安装目录中找到pycharm-debug.egg,将其拷贝到目标主机的/usr/lib/python2.7/dist-packages目录下: 执行: sudo easy_ins ...
- Eclipse-cdt 配合 gdbserver 进行 arm 程序远程调试 上
做嵌入式Linux开发也不用再羡慕windows程序员VS集成开发环境的强大,我们同样能够搭建出给力的IDE. 今天在这里记录一下我使用Eclipse-cdt,gdb,gdbserver搭建远程arm ...
- was系统的远程调试
1.进入websphere页面 2.servers->server types->websphere application servers->点击Additional Proper ...
- Eclipse远程调试Tomcat
1.Linux服务器中在Tomcat的catalina.sh文件添加如下内容: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,ad ...
随机推荐
- .net core下使用DbProviderFactories.GetFactory("")无法创建工厂的解决方案
前言:我们有时候会有一种需求,需要连接很多的数据库,如:mysql,sqlserver,oracle等等,需要把这些数据库里的数据抽取出来加工后,返回给客户端使用. 在.net framework中是 ...
- python基础(1):python介绍、python发展史
1. python介绍 1.1 python是什么样的语言 编程语⾔主要从以下⼏个⻆度为进⾏分类,编译型和解释型.静态语⾔和动态语⾔.强类型定义语⾔和弱类型定义语⾔,我们先看编译型语⾔和解释型语⾔.稍 ...
- python凯撒加密
在密码学中,恺撒密码是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例,当偏移量是3的时候,所有的字母A将 ...
- 做一个vue轮播图组件
根据huangyi老师的慕课网vue项目跟着做的,下面大概记录了下思路 1.轮播图的图 先不做轮播图逻辑部分,先把数据导进来,看看什么效果.在recommend组件新建一个recommends的数组, ...
- 协议分析中的TCP/IP网络协议
- 链路层 第一层包含源mac及目的mac,随着传输路径的变化会发生变化,在mac之后,是下层网络协议的类型,图中,下层为IP协议. 在协议解析中,需要关注的是图中type这个字段的内容. - 网络层 ...
- 【LeetCode】58.最后一个单词的长度
最后一个单词的长度 给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. 示例 ...
- python从入门到放弃之线程篇
一,什么是多线程? 1.多线程的概念? 说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程. 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分 ...
- Python—基础之杂货铺
列表.元组.字典之前的互相转换 列表与元组的转换 # 列表转换成元组:使用 tuple 函数 num_list = [3, 6, 9] num_tuple = tuple(num_list) prin ...
- protocol buffers 使用方法
protocol buffers 使用方法 为什么使用 Protocol Buffers 我们接下来要使用的例子是一个非常简单的"地址簿"应用程序,它能从文件中读取联系人详细信息. ...
- Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the serv
z 此问题为时区问题,在 JDBC 的连接 url 部分加上 useSSL=true&serverTimezone=UTC 即可.如图