zoukankan      html  css  js  c++  java
  • 老技术新谈,Java应用监控利器JMX(3)

    各位坐稳扶好,我们要开车了。不过在开车之前,我们还是例行回顾一下上期分享的要点。

    上期我们深入的聊了聊 JMX,把 JMX 的架构了解了七七八八,最后通过代码实战,解决系列疑问,实现远程动态修改应用参数,让线上服务升级、参数调优等系列问题不再难。

    说着说着,脑子里突然闪过,过往公司的一次闲聊的场景。那是一个我认为做的非常成功的老码农,给我们分享他的过往,大概是说他们那时候会点技术都很牛掰,面试如果问知道 JSP 吗?如果说知道,那接下来就是明天来上班吧,因为懂的人特别少;然后又分享了一个临近春节,发现线上服务老停,依靠重启来临时解决,但是要过春节,然后就和另一位同事想起临时解决方案:一旦服务发现问题,会发送短信通知,接受短信指令完成服务重启。

    现在想想他们为什么要靠短信指令来实现重启呢?无论他分享的这个故事,掺杂水分多少暂且不谈,就凭目前那两位老码农,一个是产品总监、一个是副总裁,而我还在苦逼哈哈的撸代码,我就不得不信服啊。

    好了,其它不扯啦,撇下故事情节,get 到重点:如何实现服务的重启?现在已是 9012 年啦,同样的问题,放在当下该如何解决呢?

    我们都知道从事编程,没有什么银弹,唯一的银弹就是照猫画虎的多练,其实也就是熟读唐诗三百首,不会作诗也会吟,那不妨就看看别人咋实现的。

    倒腾出 Resin 的源码,虽然很多人都是第一次与 Resin 谋面,没关系你就认为是 Tomcat 就好了,只要能打通任督二脉,管它是啥呢,主要是实现思想。

    面对一个开源项目或者技术轮子,我常用的大概有以下几招,接下来把招式一五一十的都献上,请各位笑纳。

    招式一:用一用

     

    先把源码跑起来,看一看,用一用,想一想。导入项目,准备工作一定要做到位,然后依据 manifest 清单文件(稍微规范点的都有这个文件),找到应用程序入口。

    640?wx_fmt=png

    Resin 源码运行时需要传入参数 watchdog,其实支持 N 多命令(不深究)。

    640?wx_fmt=png

    访问 http://127.0.0.1:8080/ 看看启动成功没?

    640?wx_fmt=png

    点击 /resin-admin 访问 resin 监控管理平台,首次登陆需要配置用户名密码,后续直接登录即可,成功页面如下。

    640?wx_fmt=png

    点点菜单玩一玩,点击 memory 菜单,效果如下,但是数据怎么来的呢?疑问先放一边,不要阻碍功能体验。

    640?wx_fmt=png

    再点击 thread 菜单,效果如下,但是数据又是怎么来的呢?疑问还是先放一边,不要阻碍功能体验。

    640?wx_fmt=png

    点击 webapp 菜单,效果如下,关键是对应的 Actions 操作还真能完成对应的服务的 start、stop、restart,天啦撸,惊呆了众人有没有。

    640?wx_fmt=png

    其它菜单也可以肆意的点点看,可能有意想不到的惊喜。

    招式二:问一问

     

    抱着自己的疑惑,去摸索,尝试灭掉心中的疑问。请来 JConsole 来个助攻,控制台敲入 jconsole,连上 Resin 进程,打入 Resin 内部,窥探一下。

    看看上面点击 memory 菜单中的数据从哪儿来的?果不其然,发现 Resin 自定义了一个 MemoryMXBean ,而且里面的属性刚好与 memory 菜单中对应上。那大概知道咋回事了,你清楚了没?没搞懂的猿粉后台直接留言啊。

    640?wx_fmt=png

    再看看上面点击 thread 菜单中的数据从哪儿来的?意料之中,发现 Resin 自定义了一个 ThreadPoolMXBean ,而且里面的属性也刚好与页面上的对应上,大概也就是那么回事儿,你 get 到了没?

    640?wx_fmt=png

    不妨再看看点击 webapp 菜单时,那些 start、stop、restart 如何又是让服务完成对应重启、停止、重启操作的呢?不得不说 Resin 还是按照常规的设计,自定义了一个 WebAppMXBean,而且提供了 start()/stop()/restart() 等操作方法,不得不说设计很高端。

    640?wx_fmt=png

    640?wx_fmt=png

    说到这,那不妨演示一下服务的停止、重启功能,不然难以服众,再次点击 resin-admin 的 webapp 菜单,效果如下。

    640?wx_fmt=png

    回到 JConsole 页面,我们点击 stop() ,停止 resin-admin 服务,直接看图就行。

    640?wx_fmt=png

    此时我们再访问管理控制台页面,果不其然,服务不可用。

    640?wx_fmt=png

    不妨在 JConsole 中点击 start() 启动一下服务,看图就行。

    640?wx_fmt=png

    此时我们再访问 resin-admin 管理控制台页面,居然又可以正常访问,真是逆天的节奏。

    640?wx_fmt=png

    备注:借助 JConsole 是为了看清楚定义了很多 MXBean,其实页面上的 start、stop、restart 按钮完成的功能 与 JConsole 的操作是一样的。

    招式三:记一记

     

    深入任何框架源码,打日志是必不可少的环节,为了便于把源码流程给串起来,关键位置一定要打印属于自己风格日志,最好是狂打属于自己的日志,然后跑起来用日志串一串流程。

    640?wx_fmt=png

    招式四:画一画

     

    是否可以画画类图梳理梳理关系,在全局上看一看。如果用的是 IDEA,那么生成类图,超级之简单。选择接口或者类,然后右键选择菜单 Diagrams --> Show Diagram... (请记住该操作,平时工作中真会帮助你省很多事情)

    640?wx_fmt=png

    640?wx_fmt=png

    效果如下,清晰明了,系列 MXBean 映入眼帘,并且继承关系与咱们的日志的打印差不多(看不清的放大了看啊,哈哈)。

    640?wx_fmt=png

    难道一个 Resin 应用服务器就这么点玩意,其实真实是下面这样的,真的好庞大(图片看不清,其实这个真看不清就对了,需要用高倍望眼镜,复杂的有点辣眼睛),但是实现套路都是一样的,都是一系列的 MXBean 定义。

    640?wx_fmt=png

    是否也可以画画时序图答案是必须的,前提是 IDEA 装了 SequenceDiagram 插件,举个栗子(只是举栗,重在告诉你方式方法)。

    640?wx_fmt=png

    招式五:猜一猜

    访问 http://127.0.0.1:8080/resin-admin/?q=index&s=0 前端页面咋运转的?

    潜心去看,会发现 resin-admin 的页面是 PHP 语言实现的,其实很简单,就是获取请求 URL 中的 q 参数,然后直接把对应的 page 页面展示出来,如果传入的 q 参数是空,则默认展示 summary 页面。

    640?wx_fmt=png

    例如http://127.0.0.1:8080/resin-admin/?q=memory&s=0  则会把 memory.page 展示出来,可以看到里面是通过访问MBeanServer 找到对应的 MemoryMXBean 并获取对应的值。

    640?wx_fmt=png

    招式六:仿一仿

    思考我们是否可以借鉴思想去实现呢?照猫画虎,答案是肯定的,今天就先不深入去开展了。

    好了,今天主要借助对 Resin 源码的简单剖析,让我们更深入理解 JMX 的应用;同时想传达面对框架源码或者技术轮子时,平时我常用的一些方式方法,简单划分为六大招式:用一用、问一问、记一记、画一画、猜一猜、仿一仿,希望对你能有点帮助。

    好了,今天的车要到站了,还有很多应用场景没有说,咱们还是且听下回分解吧,真心希望一猿小讲的每篇分享都能帮到你一点点。

    最后如果感觉有点帮助,不妨来个疯狂分享转发,因为你的每一次分享,我都认真当成了鼓励与喜欢。

  • 相关阅读:
    视图类,双缓冲,图片资源的显示
    偏好设置
    yii2安装遇到[InvalidArgumentException] Could not find package
    java 回调函数解读
    工具使用——神器mimikatz使用
    cve-2019-0708 远程桌面代码执行漏洞复现
    工具使用--sqlmap使用
    漏洞复现--通达OA前台任意用户伪造登录漏洞
    漏洞复现--cve-2020-1938 Apache tomcat 文件包含漏洞
    ThinkPad T480s 用户指南V4.0--更换键盘部分
  • 原文地址:https://www.cnblogs.com/socoool/p/12629771.html
Copyright © 2011-2022 走看看