在Plumbr,我们花了最后一个月的时间来为将来的重大改进奠定基础。 此类构件之一是为JVM添加唯一标识符,以便将来自同一JVM的所有会话链接在一起。

虽然一开始看起来似乎很琐碎的任务,但是当查看JVM捆绑的jps命令的输出时,围绕该问题的复杂性开始令人头疼,该命令列出了我的机器中所有当前正在运行的Java进程:

My Precious:tmp my$ jps
1277 start.jar
1318 Jps
1166

上面列出了jps命令的输出,列出了我的机器上当前正在运行的所有Java进程。 如果您不熟悉该工具,则它会在左侧列出所有进程的进程ID,并在右栏中列出进程名称。 显然,唯一一个以有意义的名称列出自己的人就是jps本身。 另外两个不太礼貌。 隐藏在start.jar首字母缩写后面的是Jetty实例,而完全匿名的实际上是Eclipse。 我的意思是,真的– Java世界上最大的IDE甚至不愿意在标准Java工具中用名称列出自己吗?

因此,一窥内置工具的最新技术,就可以回到我们手头的要求上。 我们当前的解决方案是通过进程ID +计算机名称组合来标识JVM。 这有一个明显的缺点–每当进程死掉时,它的轮回就不会从内核获得相同的ID。 因此,每当JVM Plumbr监视的监视重新启动或终止时,我们都会失去跟踪,无法将后续调用绑定在一起。 对于监视工具来说,这显然不是合理的行为,因此我们继续寻找更好的解决方案。

接下来的明显步骤是三个月前,当时我们允许用户通过-Dplumbr.application.name = my-precious-jvm启动参数指定计算机的名称。 看起来似乎很明智,但在这三个月中,只有2%的用户实际上不愿意指定此参数。 因此,现在该回到绘图板上,看看在尝试将唯一且易于理解的标识符自动绑定到JVM实例时,我们有哪些选择。

我们的第一种方法是使用main()方法获取类的名称,并将其用作标识符。 当我们在包含四个不同Jetty实例的开发箱中启动构建时,立即出现的弊端很快就会显现出来–您立即拥有四个不同的JVM,它们都在相同的但不太唯一的标识符下进行绑定。

下一个尝试是解析应用程序的内容并从部署描述符中识别应用程序–毕竟, Plumbr监视的大多数应用程序都打包为WAR / EAR捆绑软件,因此这将是有意义的,并使用捆绑软件中存在的信息。 实际上,绝大多数工程师的确在web.xmlapplication.xml<display-name>参数中给出了有意义的名称。

这解决了部分问题–当所有四个Jetty实例都运行具有不同<display-name>的应用程序时,它们将显示为唯一。 确实如此,直到我们的登台环境表明情况并非总是如此。 我们在同一台计算机上有几个不同的Plumbr Server实例,它们使用不同的应用程序服务器,但是使用相同的<display-name>参数部署相同的WAR文件。 您可能会猜到,这再次扼杀了此类ID的唯一性。

另一个引起问题的事实是,有一些应用程序服务器正在运行多个Web应用程序-将多个WAR文件部署到容器中后会发生什么?

因此,我们不得不进一步挖掘。 为了区分在同一台机器上运行同一应用程序的多个JVM,我们添加了启动文件夹以保证标识符的唯一性。 但是多重战争的问题仍然存在。 为此,我们回到了最初的假设,即使用主类名称作为标识符。

还有一些技术上的细微差别,例如区分用于ID的实际哈希和同一哈希的用户友好版本,现在,我们提供了一种解决方案,它将在您监视的JVM列表中显示类似的内容:

虚拟机 由于
青蒿素分期 自助服务(WAR) 2014年7月7日11:45
青蒿素分期 网上商店(WAR) 2014年8月7日18:30
芳纶 com.ringbearer.BatchProcessor 01.01.2001 00:00

因此,实际上,我们能够提出一个不错的解决方案,并在其他所有方法均失败的情况下使用-Dplumbr.application.name参数进行手动命名。 仍然存在一个问题–为什么JVM工具和API完全缺少系统管理员通常需要的东西?

翻译自: https://www.javacodegeeks.com/2014/07/identifying-jvm-trickier-than-expected.html

识别JVM –比预期的要复杂相关推荐

  1. jvm能识别什么字符集_识别JVM –比预期要难

    jvm能识别什么字符集 在Plumbr,我们花费了上个月的时间来为将来的重大改进奠定基础. 此类构件之一是为JVM添加唯一标识符,以便将来自同一JVM的所有会话链接在一起. 尽管一开始似乎是一项琐碎的 ...

  2. 又一任务被Transformer攻陷!NVIDIA开源HORST,用Transformer解决早期动作识别和动作预期任务...

    关注公众号,发现CV技术之美 本文分享论文『Higher Order Recurrent Space-Time Transformer for Video Action Prediction』,由 N ...

  3. JVM 优点与缺点的深入分析

    Java 最初诞生的时候,它可以说是其他语言的进化版.不仅因为Java很简单,而且这一进化的语言还是一个可以运行第三方硬件字节码的虚拟机.它还是垃圾收集站,从而令存储管理和内核转储(core dump ...

  4. 三维全景导航、偏航识别、深度学习偏航引擎,滴滴导航若干关键功能的技术突破与实践...

    导读:滴滴导航是滴滴出行旗下基于丰富的交通大数据和领先的算法策略,面向网约车及自驾场景而打造的一款技术领先的地图产品.伴随着海量网约车司机每日8小时+的导航使用,产品积累了大量的反馈并持续优化打磨.在 ...

  5. SOTIF预期功能安全分析方法

    文章目录 1. 预期功能安全简介 2. SOTIF中的场景分类 3. SOTIF预期功能安全分析方法 1. 预期功能安全简介 在汽车四化(电动化.网联化.智能化.共享化)领域,尤其是自动驾驶领域,引入 ...

  6. 论文阅读丨神经清洁: 神经网络中的后门攻击识别与缓解

    摘要:本文将带你了解深度神经网络的后门知识,作者提出了一种可靠且可推广的DNN后门攻击检测和缓解系统,这是了解对抗样本和神经网络后门攻击的深度解读. 本文分享自华为云社区<[论文阅读] (02) ...

  7. 11.JVMGC基础

    一.JVM基础 1.基础术语 1.1 并行并发 并行 并行是多个线程同时在运行,其发生在多核心 CPU 下,每个 CPU 核心执行一个线程,多个线程同时执行 并发 并发偏重于任务交替执行,但是多个任务 ...

  8. csdn最牛“首发”性能测试系类文章---jmeter性能测试从理论基础到项目搭建【3-1】

    [性能测试系类文章大纲] 最近看很多小伙伴问我凡叔什么时候出性能测试系类呢,这不就来了嘛,连续肝了几天终于是赶出来了,这段时间公司有点忙,所以可能更新的速度没用那么快哦,不过也不会慢到哪里去,, 好了 ...

  9. 【Java10】lambda表达式(函数式编程),Stream流,File类,字节/字符流,乱码,缓冲/转换/序列化/打印流,Properties

    文章目录 1.lambda表达式标准语法:()->{} 2.lambda表达式简略语法:可推导即可省略 3.lambda表达式原理:lambda效率比匿名内部类高 4.两个函数式接口:Consu ...

最新文章

  1. [转载] Intention scheduling for BDI agent systems
  2. Qt修炼手册12_线程同步与线程等待条件
  3. 图像处理技术(三)白平衡
  4. TIOBE 11 月榜单:Python 挤掉 Java,Java的下跌趋势确立了?
  5. MySQL时间戳与日期格式的相互转换
  6. Java并发编程实战~软件事务内存
  7. 神经网络训练3次就准确率不变_1组高效徒手训练,6个动作每周3-5次,帮你在家高效率燃脂增肌!...
  8. html清除div虚线,纯CSS去除按钮以及链接点击时虚线
  9. Getphonenumber获得电话号码的例子
  10. sql server 按年月日分组
  11. 我对javascript面向对象编程的理解---------继承
  12. 宝藏级UI组件库:FirstUI,微信小程序版+uniapp版更新至1.6.0,完美支持vue3
  13. SXF2019集合遍历
  14. 412 Precondition Failed
  15. 基于GIS和Python的百度地图街景爬取
  16. 计算机二级c语言2019年3月,2019年3月计算机二级
  17. 计算机excel二进制,在Excel中实现二进制、八进制、十进制、十六进制之间的转换函数介绍...
  18. ThinkingInJava_吸血鬼数
  19. 求三个数的最小公倍数的解法之美
  20. 二维小球完全弹性碰撞绝对坐标速度计算公式

热门文章

  1. List实现类中调用下标删除VS调用元素删除
  2. 集合中重写equals方法删除new的对象
  3. js 方法传递对象参数
  4. 学生用计算机说明方法,15.文中多处运用了作比较的说明方法.请任选一例.说说运用这种方法的作用. 例子: 作用:...
  5. c遗传算法的终止条件一般_KDD比赛之遗传算法(举例理解)
  6. mysql8.0.11 zip安装教程
  7. 匿名内部类与Lambda表达式习题
  8. graphql 有必要吗_您准备好观看GraphQL了吗?
  9. io流,装饰者模式_流与装饰器
  10. java 9 module_Java 9:欢迎来到Module World