范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

JDK中自带的JVM分析工具

  一、业务背景
  对于分布式架构中的文件服务来说,由于涉及大量的IO流操作,很容易引发JVM的相关异常,尤其是内存溢出的问题;
  在最近的一次版本迭代中,真实的业务处理场景和上述几乎一致,由于在文件服务中添加批量处理的动作,直接唤醒了隐藏许久的BUG,就是最常见的内存溢出;
  问题的起因:在word文档完成内容识别后,转换为pdf文件,然后进行页面分割转为一组图片,在这个复杂并且超长的流程中存在一个数组容器未销毁;
  解决的方式:分析JVM的dump文件,定位OOM问题引发的根本原因,结合文件服务的异常日志分析,添加资源的释放动作,从而解决问题;二、Jdk-Bin目录
  对于相当一部分新手来说,看到JVM的问题都是Bug不知所起一脸懵的,其实这种心态大可不必,从职场几年的开发经验上看,JVM的问题大致分为两种:开发轻松解决:可以升级内存资源或者调整分配,又或者对程序优化,完成相关资源的管理和释放,这是最常用的手段;轻松解决开发:由于经验不足,程序出现重大BUG导致JVM异常,进而引起系列的连锁反应,这种不会绝地反弹,只有一地鸡毛;
  在解决常规的JVM异常时,通常依赖JDK中基础工具即可完成问题的定位,从而进行分析和解决,不过这些需要对基础工具熟练使用才行,而很多JDK自身的能力又是经常被忽略的;
  在jdk的bin目录中,有很多自带工具可以用于对JVM的分析;
  上述是基于jdk1.8的目录,里面有很多开发经常用到命令,下面围绕一个微服务的启动和运行,来看看基于JDK中自带JVM工具的用法;三、命令行工具1、jps命令
  jps:虚拟机进程状态工具,该命令在Java环境部署和服务启动查看时经常用到,首先在本地启动一个facade门面微服务,然后在命令行中执行查询;jps:命令默认输出的是进程ID和应用主类的名称;-l:输出进程ID和应用主类的完整路径;-v:输出向jvm传递的参数,此处展示为idea中显式配置的VM-options参数,其他内容自行查看即可;-m:输出向main方法传递的参数,服务启动前可以在idea的Program-arguments配置;$ jps 1281 FacadeApp  $ jps -l 1281 com.explore.facade.FacadeApp  $ jps -v 1281 FacadeApp -Xms128m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m  $ jps -m 1281 FacadeApp hello,main-method 复制代码2、jinfo命令
  jinfo:在命令后面带pid进程号,可以输出指定进程的配置信息,在应用启动时通常不会指定过多的配置参数,就可以使用该命令查询很多参数的默认值;该命令还可以在运行时动态调整部分参数,只是很少被使用;$ jinfo 1281            # 只粘贴个别参数 Java System Properties: # 系统参数     java.runtime.version=1.8.0_144-b01     file.encoding=UTF-8     sun.java.command=com.explore.facade.FacadeApp hello,main-method      VM Flags:               # 虚拟机参数     -XX:InitialHeapSize=134217728 -XX:MaxHeapSize=268435456 -XX:MaxNewSize=267911168      VM Arguments:           # 运行时参数     jvm_args: -Xms128m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m     java_command: com.explore.facade.FacadeApp hello,main-method  $ jinfo -sysprops 1281  # 只输出【Java System Properties】参数  $ jinfo -flags 1281     # 只输出【VM Flags】参数 复制代码3、jstat命令
  jstat:以指定的频率输出JVM的监控指标,下述命令输出内存占用和GC相关信息,每隔3秒输出一次,连续打印5次;由于这里只是启动一个简单的微服务,没有执行业务逻辑,所以各项指标比较平稳;$ jstat -gcutil 1281 3000 5 S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT    0.00   0.00  57.97  64.16  92.82  88.75    3    0.028     9    0.516     -        -    0.544 0.00   0.00  57.97  64.16  92.82  88.75    3    0.028     9    0.516     -        -    0.544 复制代码
  该命令是比较常用的,这里各项指标的统计逻辑,在tools.jar包中有jstat_options参考文档,相对路径sun/tools/jstat/resources/目录下;option gcutil {   column {     header "^S0^"	/* Survivor 0 Space - Percent Used */     data (1-((sun.gc.generation.0.space.1.capacity - sun.gc.generation.0.space.1.used)/sun.gc.generation.0.space.1.capacity)) * 100   }   column {     header "^S1^"	/* Survivor 1 Space - Percent Used */     data (1-((sun.gc.generation.0.space.2.capacity - sun.gc.generation.0.space.2.used)/sun.gc.generation.0.space.2.capacity)) * 100   }   ...... } 复制代码4、jstack命令
  jstack:输出指定进程当前时刻在JVM中的线程信息,为了清楚的展示其效果,在服务启动时创建线程死锁,然后通过该命令就会把发生死锁的线程打印出来,通过输出可以发现两条互相等待的线程信息;$ jstack 1281 Found one Java-level deadlock: ============================= "test-thread-02":   waiting for ownable synchronizer 0x00000007b00a35d0, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),   which is held by "test-thread-01" "test-thread-01":   waiting for ownable synchronizer 0x00000007b00a35a0, (a java.util.concurrent.locks.ReentrantLock$NonfairSync),   which is held by "test-thread-02"  Java stack information for the threads listed above: =================================================== "test-thread-02":     at sun.misc.Unsafe.park(Native Method)     - parking to wait for  <0x00000007b00a35d0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)  "test-thread-01":     at sun.misc.Unsafe.park(Native Method)     - parking to wait for  <0x00000007b00a35a0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)  Found 1 deadlock. 复制代码5、jmap命令
  jmap:可以输出指定进程的内存中对象映射信息,或者堆的关键信息、内存的使用统计、GC算法、配置、类的实例信息及内存占用等,该命令在解决JVM问题时也经常使用;$ jmap 1281  $ jmap -heap 1281 Heap Configuration:    MinHeapFreeRatio         = 0    MaxHeapFreeRatio         = 100    MaxHeapSize              = 536870912 (512.0MB)     Heap Usage:     PS Young Generation     Eden Space:     From Space:     To Space:     PS Old Generation  $ jmap -histo:live 1281  num     #instances         #bytes  class name ---------------------------------------------- 1311:             1             32  com.explore.facade.FacadeApp$EnhancerBySpringCGLIB$313d9e3 复制代码四、可视化工具1、jconsole
  Java内置的JVM性能监控工具,在熟悉上述的命令行工具之后,对于该可视化工具的使用不会太陌生,在命令中可以查看到的默认参数或者应用自定义配置,在该工具中也可以找到,并且以图形化的方式呈现;$ jconsole  # 通过该命令会唤起jconsole界面 复制代码
  这里选择线程一栏,可以直观的看到线程数量的变化曲线,也可以在下方查看某个线程的具体信息,并且可以通过检测死锁功能,发现在服务中创建的test-thread-01和test-thread-02两条线程;
  2、visualvm
  VisualVM作为解决JVM问题的常用工具,集成的功能丰富且强大,此处通过Idea插件的方式启动FacadeApp微服务,在进程主页可以看到自定义的配置,线程一栏因为检测到死锁直接给到异常提示;
  在监视一栏可以通过【堆dump】查看详细的信息,可以查看类的实例数和大小,并且完成了结果排序和占用统计;此处信息在定位和解决JVM问题时非常重要;
  对于JVM的监控工具来说,其能力与常用的命令行语法差异很小,并且这些命令在jdk中tools.jar包也可以找到其对应的类,对于一些更高级的监控平台来说,例如Kuboard、Skywalking等,也对这些底层能力做了集成,其原理应该也是大同小异。
  链接:https://juejin.cn/post/7158238203537784868

JS判断两个数组是否相等,元素以及顺序相等,顺序不同但元素相等判断两个数组是否相等一般有两种场景。第一种是数组完全相等,即数组元素相同且元素顺序一致第二则为元素相同但顺序不同。数组完全相等如果数组元素只是字符串,数字,布尔值这些类型,可以考虑这国禁用微信支付宝?原来封杀Tiktok只是开始!众所周知,微信(国际版WeChat)是留学生和华人群体每天使用频率最高的app之一,但你听过禁止中国人使用微信这种事吗?最近还真就发生在了美国01hr禁止所有人使用微信近日,在某个社区多能服务机器人,来给你送快递啦!这几年在疫情的影响下,带动了网购的火爆和快递需求量的激增,为了减少人与人之间的接触,无接触式配送被广泛采用,用于降低人和人之间的接触而导致的疫情传播的可能性。而经济发展带来的高质量大展宏图受众画像宏观分析篇中科网联(ccdata)发布大展宏图2023年中国家庭大屏白皮书报告。通过近半年的行业研究,消费者调研,结合中科网联(ccdata)家庭终端监测数据分析和提炼,本次报告就以下四个模调试netconsole的使用开发环境客户端开发板FireFlyRK3399Linux4。4IP192。168。137。110服务端VMwareWorkstationPro16,ubuntu18。04IP192解密百度答题成为答主通过审核的奥秘相信大家在网上一定看到过做百度答题,每天日收入不菲的文章,那么到底是如何进行注册和通过的呢?百度APP,打开app下面任务栏的答主中心我们一起看看到底是如何操作的,先下载百度APP三大股指上演V型反弹,标普终结五连跌,英伟达飙升14美国三大股指盘中上演V型反弹美国首次申领失业救济的人数意外降至四周最低水平英伟达乐观预期芯片前景,股价刷新去年4月份以来收盘高位英伟达上季营收盈利均超预期,带领科技股及纳指上扬。另网爆老任新机是switch2!配置性能算力提升6倍超PS4关于任天堂switch继任者的传言最近有多了起来!在之前英国竞争与市场管理局最近公布的文件显示,switch云服务将在switch和X上可用,很明显为了一些保密的原因,文件隐藏了这美国芯片法案将落地,2030年建成两个大型尖端芯片制造集群美国商务部长雷蒙多(GinaRaimondo)周四表示,美国将利用规模530亿美元的芯片法案资金,到2030年建成两个新的大型尖端芯片制造工厂集群。雷蒙多当天在美国首都华盛顿的乔治国产芯片为何不行?4国产机仅差一步,华为vivo更喜欢谁?如果您喜欢,可以点击上面的关注二字。后续会为您提供更多有价值的内容。国产芯片为何不行?中芯国际早在2020年就被美国列为不受欢迎的实体名单,西方国家对中芯国际的制裁从未停止,为了阻达洛特我们展现了团队精神,繁忙的赛程让球员表现更好达洛特在接受官网采访时表示,球队的和谐和每个球员的团队精神将帮助曼联实现目标,不仅是本赛季,而且在未来。达洛特说道很明显,我们有一个繁忙的赛程,但我们在过去的几场比赛中展示了我们的
Java基于springredis集成SpringBoot操作Redis本文章为系列文章,如需系统观看请按照文章顺序阅读,如有所了解,解决针对性问题,可直接阅读,谢谢支持!前言Java操作Redis有很多种方式,主要有Jedis,redisson,le车辆之间互动充电,长安汽车公布新专利大家知道,新能源汽车可以外放电给火锅等电器使用。那能不能外放电给另一辆车用呢?最近,长安汽车就在做这种尝试。天眼查App显示,近日,重庆长安汽车股份有限公司互助式充电方法装置设备及这20张照片告诉你,为什么要去辽宁辽宁有着共和国长子东方鲁尔的别称,是中国少数民族人口较多的省份之一,位于中国东北地区。地形以山地丘陵平原为主,气候类型属于温带大陆性季风气候。四季分明,光照充足雨热同期且降水集中于中国男篮换帅迎来大反转!广东男篮成最大赢家,球迷终于等到了此前,曾经爆料过,乔尔杰维奇有可能会接班杜锋的这家塞尔维亚当地媒体,再次爆出了猛料,下周乔尔杰维奇就会赶往中国,正式与中国篮协进行签约,这个事情看来是已经坐实了。为什么我会这么说呢提升租赁住房品质为青年人才提供多样化居住选择新时代,人们对居住质量和环境提出了更高的要求。上海市住房发展十四五规划提出,十四五期间,上海将以住有宜居为目标,不断完善多主体供给多渠道保障租购并举的住房制度。近日,位于闵行区吴泾重庆昨日新增本土确诊病例150例本土无症状感染者2147例记者从重庆市卫生健康委员会了解到,11月13日024时,重庆市新增本土确诊病例150例(秀山县29例沙坪坝区25例垫江县16例开州区11例渝中区8例奉节县7例渝北区6例北碚区5例巴中超4消息李铁接受调察,河北赛前讨薪,孙准浩过招C罗今天的第1条消息与前国足主帅李铁有关。据锦观新闻消息,李铁11月10日上午参加中国足协教练培训时被带走。相关人士透露,李铁被带往国家体育总局接受相关问询。这一事件引起了球迷和媒体的热搜第一!这种情况可休痛经假,深圳明确11月13日,深圳痛经假经确诊可休1到2天冲上热搜第一。据了解,近日,深圳市人社局官网发布了针对政协委员程宗玉关于保障女职工享有生理假期的提案的答复函时明确了患有重度痛经及月经过多宝宝出现以下这些情况,最好别洗澡与成人相比,婴儿的身体仍在迅速发育,在身体素质和各系统及器官的生理功能方面都比较独特。因此,在为婴儿提供日常护理时,父母应特别注意孩子的身体状况。如果婴儿有以下情况,不建议家长给他联发科发布两款Kompanio芯片26大小核设计,最高频率2。2GHz联发科宣布推出新款适用于入门级Chromebook的两款芯片Kompanio520与Kompanio528。联发科宣称,新的芯片升级了性能,提供了无缝的网络浏览体验,用户可以享受全地产暴涨是回光返照,还是卷土重来?2022年11月11日,电商大战不如往年那么吸睛。令人意外的是房地产板块迎来暴涨。大A房地产板块以6。24的涨幅排名两市所有板块的第一名。个股也纷纷掀起涨停潮,最终阳光城中南建设绿