首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏kimze

    分布式系统性能调优: 一篇彻底搞定JMC定位JVM性能问题

    Java性能调优:利用JMC分析性能 Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻。 好的分析工具能起到事半功倍的效果,利用分析利器JMC、JFR,可以实现性能问题的准确定位。 Java线上进程很多面临大堆内存,无法dump堆内存快照,如何解决这样的问题,就可以通过JMC结合JFR连接到线上进程做一段时间采集,分析java进程性能问题 ---- 本文主要阐述如何利用JMC分析系统性能 JMC:Java Mission Control JFR:Java Flight Recorder JMC:Java Mission Control JMC打开性能日志后,主要包括7部分性能报告,分别是一般信息 jvm进程信息 图片 查看当前执行的 JFR 任务 图片 新建一个采集 5min的 JFR任务(采集固定时长JFR任务) 图片 查看采集任务状态 # 生成jfr收集文件后可导入JMC进行可视化问题定位

    2.1K62编辑于 2023-01-03
  • 来自专栏四火的唠叨

    JVM 问题定位工具

    熟悉 JDB 还是有价值的,很多情况下需要我们在命令行下完成简单的 debug 问题定位。 早些时候 JVM 曾经因为开放这样的 debug 端口,遇到远程扫描,虚拟机发生崩溃,参见 bug 链接。 VisualVM 和 JConsole VisualVM 这个工具来自 Netbeans 的项目,JVM 的运行情况一目了然。 JProfiler 和 Optimizeit JProfiler 和 Optimizeit 一样,都是综合性的性能剖析工具,甚至可以分析不同方法的 CPU 时间占用,帮助找出 CPU 热点。 总的来说,通常监控型的工具功能最强大,但是对系统资源要求也很高,对于生产环境上特有的问题,还是多考虑使用一些快照工具,内存和 CPU 占用小,系统中断时间短。

    54810编辑于 2022-07-15
  • 来自专栏菩提树下的杨过

    JVM问题典型案例定位学习

    https://www.cnblogs.com/cz123/p/6918708.html https://www.jianshu.com/p/8e8a5a773648 解决方法: 既然多线程并发加载可能出问题 可以显式在主线程最开始用forName加载这2个类,这样类加载就变成在main线程中串行加载,问题得到解决: public static void main(String[] args) throws 大多数情况下,java并不推荐重载该方法,因为jvm的GC已经把垃圾回收做得很好了。 FinalReference,放入一个队列里,当GC发生时,如果该实例被标识为垃圾对象,GC清理完后,会用一个额外的线程(重点:这是1个独立的单线程),从队列里一个个取出来,调用重载的finalize方法,如果这种对象在JVM 三、堆外内存不释放 先回顾下堆外内存的分布,对于DirectByteBuffer之类的对象,JVM堆上只存放了其"引用",如下图,引用指向的实际内存块在JVM堆外(即:实际分配的堆外内存不受GC管控)

    86310发布于 2020-03-19
  • 来自专栏吴伟祥

    使用VisualVM、JMC远程监控JVM

    本文主要介绍如何使用 VisualVM 进行性能分析及调优。 如何使用JDK自带jvisualvm监控工具 使用jvisualvm、jmc远程监控JVM 部分参数说明 ? ? §  堆Dump -- 生产当前程序的内存快照hprof文件,对于分析内存溢出问题比较有帮助。 Visual GC(监控垃圾回收器) 有人说“JVM的内存分为两块堆和栈”,还有人说"JVM的内存分为三块(新生代、老年代、方法区)"该有个结论了 对于堆栈说法的人他们是根据下图中的维度来看问题的 ? 接下来介绍另一个JDK自带的监控工具jmc,打开bin/jmc.exe 之后,jmc即可扫描出本地运行的JVM进程 ? 如果想要用jmc监控远程的JVM进程,配置方式和jvisualvm方式一一样即可。

    2.5K20发布于 2018-08-14
  • 来自专栏全栈程序员必看

    JVM调优工具总结(jConsole jmc jvisualvm)

    false -Dcom.sun.management.jmxremote.ssl=false -jar ay.jar 运行这个命令等服务启动成功就可以了 三、本地连接,找到本地jdk安装目录bin下,jmc.exe ,jconsole.exe,jvisualvm.exe 1.用jmc连接 双击jmc.exe,进入后点击文件–》连接–》创建新连接–》下一步,主机:输入192.168.222.130(你的服务器ip

    1.3K30编辑于 2022-09-04
  • 来自专栏朝雨忆轻尘

    Java性能调优:利用JMC进行性能分析

    JMC 程序 (JDK_HOME\bin目录下) 会启动一个窗口程序,然后让我们选择对那进程进行监控,JMC打开性能日志后, 主要包括7部分性能报告,分别是一般信息、内存、代码、线程、I/O、系统、事件 启动JMC,打开生成的JFR性能日志 1. 一般信息,如下图所示 ? 图中, 堆使用量、CPU总体占用率、GC暂停时间是非常重要的三个指标 对于Java应用而言,GC暂停时间是最值得关注的指标。 通过线程概述报告,我们可以得知CPU占用率的分布(系统占用率、应用程序+JVM占用率)和活动线程数,对于CPU占用率而言,应用程序应该占用99%的计算资源,而活动线程数应该控制在合理范围内(具体看应用) 系统性能分析初期,我们可以首先定位线程争用的情况,可以初步达到性能的飞跃。 5. IO ?   IO作为系统的基础指标,IO过高会导致系统性能急剧下降,避免过度打印日志和生成大文件可以避免系统IO过高导致的性能问题

    3.3K31发布于 2019-06-19
  • 来自专栏bisal的个人杂货铺

    定位磁盘性能问题的武器

    最近碰到一个Oracle DG备库延迟的问题,经过排查,定位是磁盘性能问题,用的是普通磁盘,而不是SSD,且性能较差,存在读写等待。 关于定位磁盘的性能问题,可以有很多第三方或者原生工具的支持,Linux自带的iostat就是其中之一。 iostat指令是Linux/Unix系统上的一个性能分析工具,可以用来监控系统的I/O性能,包括了CPU利用率、磁盘读写速度、网络吞吐量等。 iostat可以实时输出系统的I/O性能信息,也可以按照一定的时间间隔输出统计信息。 iostat带上各种参数,即可以进行磁盘的性能验证,例如, iostat -xdm 1 iostat的常用选项如下, -c:显示CPU利用率相关的信息; -d:显示磁盘I/O相关的信息; -n:显示网络

    51641编辑于 2023-08-18
  • 来自专栏流柯技术学院

    jstack+top定位性能问题

    定位性能问题,尤其是cpu使用率过高时,经常需要查找cpu消耗较高的线程,然后查看其堆栈,从而进入代码定位问题。     该场景下, jstack+top是一种非常经典的方式。

    1.7K20发布于 2018-08-31
  • 来自专栏码上修行

    可视化分析定位线上 JVM 问题

    从上图可以发现,“3 problems detected”,即识别出 3 个内存问题。 3. 在线 GC 可视化视图解读 1)JVM memory size(JVM 内存大小) ? 3)Interactive Graphs(GC 前后堆区大小变化视图) 为了更好的了解 GC 垃圾回收对应的区域,可以参考这篇文章【从 Java 代码如何运行聊到 JVM 和对象的创建-分配-定位-布局 从 GC 日志可视化入手,再去 pinpoint 系统监控探究问题所在 1)通过 Pinpoint 监控系统查看频繁发生 Full GC 的系统应用所在的服务器 JVM 参数配置情况,结果如下图所示: 小结 通过三步法定位线上环境 JVM 问题,如频繁 Full GC 、内存泄漏或发生 OOM 现象,即将 GC 日志、Dump 文件及 APM 监控系统结合在一起观察分析,寻找出问题产生的根本原因,然后才能对症下药 ,真正解决系统存在的问题或是隐患,使系统性能更稳健,响应更快,从而使用户体验更佳。

    3.4K31发布于 2020-04-02
  • 来自专栏Howl同学的学习笔记

    JVM排查定位

    ---- 源自笔者某次回去等通知的故事 1. jps 列出正在运行的虚拟机进程、及其pid,命令参数有: -l:输出主类全限定类名 -v:虚拟机进程启动时的JVM参数 jps -l ? 可以定位哪个类溢出 5. jsatck 生成当前线程存储快照(Threaddump),常用于定于线程长时间停顿 6. 可视化工具 6.1 JConsole 查看各种堆、方法区、线程等信息 ? 内存标签页:相当于jstat命令,可以查看堆和方法区的情况 线程标签页:相当于jstack命令,可以查看各线程停顿情况,可以检测死锁 类标签页:查看总加载类数目以及当前加载的类的数量 VM概要标签页:各种JVM -----查看死循环问题 7.2 频繁GC 问题一般是大量对象涌入撑满导致 jstat -gcutile pid 查看是否频繁GC,根据次数和时间对比 是否堆年轻代老年代需要调优 7.3 OOM 无非就是内存泄漏 年轻代大量涌入无法清除,进入老年代也无法清除 生成dump快照 或 自动设置的快照-XX:-XX:+HeadDumpOnOutOfMemoryError 用分析工具分析:查看哪个类和实例数过大,本来就定位线程了

    96220发布于 2020-06-04
  • 来自专栏玩转JavaEE

    6 个 Java 工具,轻松分析定位 JVM 问题

    你可能一开始会比较畏惧使用复杂的工具去排查问题,又或者是打开了工具感觉无从下手,但是随着实践越来越多,对 Java 程序和各种框架的运作越来越熟悉,你会发现使用这些工具越来越顺手。 这篇文章中介绍下如何使用 JDK 自带工具来分析和定位 Java 程序的问题。 使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具,帮助我们查看 JVM 的一些信息。 参数的方式不对,-Xms1g 和 -Xmx1g 这两个参数被当成了 Java 程序的启动参数,整个 JVM 目前最大内存是 4GB 左右,而不是 1GB。 因此,当我们怀疑 JVM 的配置很不正常的时候,要第一时间使用工具来确认参数。 我们明明配置线程栈最大 256KB 啊,为什么会出现 4GB 这么夸张的数字呢,到底哪里出了问题呢?

    62010编辑于 2022-03-14
  • 来自专栏小豪成长日记

    快速定位网站性能问题,提前下班!

    内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步。 分享不易,希望能够得到大家的支持和关注。 查看network时间 直接来一张大图你怕不怕? 有兴趣的朋友可以用某些网站查看一些performance,看看自己的掌握程度,有问题欢迎讨论。 DOMContentLoad的时候会触发之前绑定的事件,而且没有在主线程中显示 总结 本文简单的说了两个点,一是network的timing栏,二是performance panel,只要掌握了这两个功能的使用方法,就可以快速定位网站性能问题 两个点:一个头信息压缩,二是解决了队头阻塞问题,三是增加了服务端push。 ,还是不够完善的,我们需要知道真实的用户环境下是怎么样的,需要RUM(Real User Monitoring: 真实用户数据监测),写个脚本来收集用户的访问情况,并可视化,作为我们的性能指标再好不过了

    44330编辑于 2023-10-22
  • 来自专栏大数据成神之路

    实战案例分享:根据 JVM crash 日志定位和分析问题

    GC 的参数 JVM在GC的控制参数中,有一个GC前进行校验的参数,在校验过程中当发生地址异常的化会打印出异常的地址,并且让JVM crash,因为这个参数每一次GC都要检查,包括新生代的GC,影响一定的性能 JMV提供的SA工具 JVM提供的HSDB工具是一款非常好的工具,通过工具能查看和分析运行中的JVM的heap对象,当然也可以常看core dump, 但问题是HSDB是有UI界面的,我们在linux系统中通常没有 :$JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB $JAVA_HOME/bin/java 99083 这里有几个注意点: 版本问题,如果产品上装了多个 MethodHandler 虽然我们找到了JVM crash问题的根因,但我们还需要继续深入的找到谁才是罪魁祸首,就是JVM为何会调整vmtarget的值 分析谁调用了adjust_vmtarget函数即可 JVM提供了环境参数可以控制是否压缩指针 -XX:+UseCompressedOops 这样一个完成的通过JVM crash 日志和core dump进行JVM问题定位和分析结束了,希望能对你有所帮助

    2.9K21发布于 2020-11-06
  • 来自专栏盛开在夏天的太阳

    JVM-GC3--定位线上OOM问题的方法

    第二节jvm公开课课, 主要介绍了一个知识点. 那就是线上发生OOM, 如何定位 1. top命令, 线上查看cpu和内存的使用情况 2. jstack 进程号   查看当前进程有哪些线程   初步定为排查线程的健康状况, 如果有很多线程处于等待状态 很重要的一个方面, 加日志. ---- 常见的GC问题  1. java启动时如何设置jvm的日志   java -Xloggc:/root/1.txt    这个命令是把jvm日志打印到/root/1 : 滚动生成日志也存在一定的问题, 有可能你要查看的日志已经被删除了. 看看哪些类实例最多, 这样内存和cpu居高不下. ---- 扩展阅读 整理这个文件的时候, 想起之前同事整理的一篇在spring cloud环境下,如何通过spring boot actuator来定位线上问题

    1.5K30编辑于 2022-05-09
  • 来自专栏啄木鸟软件测试

    JVM性能

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 在JDK1.7之前JVM存在年轻代(Young Generation)、年老代(Old Generationn)和持久代(Permanent Generation)。 1. 元空间 由于持久代的问题比较多,从JDK8开始废弃了持久代迎来元空间(Metaspace),官方原文是这样写的:This is part of theJRockit and Hotspot convergence 输出jvm参数。 Ø-V。输出通过flag文件传递到JVM中的参数(.hotspotrc文件或-XX:Flags=所指定的文件。 Ø-Joption。传递参数到vm,例如:-J-Xms512m。 输出jvm参数。

    56210发布于 2019-12-23
  • 来自专栏咸鱼学Python

    如何定位及优化SQL语句的性能问题

    而对于不同的表结构,采用不同的SQL语句,性能上可能千差万别。本文,就基于MySql数据库,来介绍一下如何定位SQL语句的性能问题。 对于低性能的SQL语句的定位,最重要也是最有效的方法就是使用执行计划。 性能从好到差依次为:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge 简化SQL语句的重要方法就是采用临时表暂存中间结果,这样可以避免程序中多次扫描主表,也大大减少了阻塞,提高了并发性能。 12、尽可能的使用 varchar/nvarchar 代替 char/nchar 13、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。

    1.6K30发布于 2020-07-21
  • 来自专栏JavaGuide

    手把手教你定位常见Java性能问题

    概述 性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就没办法出现性能问题,包括笔者自己遇到的性能问题也不多,所以为了提前储备知识,当出现问题的时候不会手忙脚乱 ,我们本篇文章来模拟下常见的几个Java性能故障,来学习怎么去分析和定位。 预备知识 既然是定位问题,肯定是需要借助工具,我们先了解下需要哪些工具可以帮忙定位问题。 这里dump信息直接定位出了问题方法以及代码行,这就定位出了CPU占满的问题。 总结 本文模拟了常见的性能问题场景,分析了如何定位CPU100%、内存泄漏、死锁、线程频繁切换问题。分析问题我们需要做好两件事: 掌握基本的原理 借助好工具。

    1.4K10发布于 2020-05-07
  • 来自专栏流柯技术学院

    18 个命令&工具帮你定位 Linux 性能问题

    性能测试的工程师来说,top命令式是非常有用的,我在另外一篇文章“老李分享:应用程序性能瓶颈定位方法和原理”,里面提供了一个案例,来帮助我们进行性能定位。 2. 它是一个非常有用的工具,系统管理员可以用来监控网络性能定位并解决网络相关问题。 这个工具常常用来追踪存储设备的性能问题,其中存储设备包括设备、本地磁盘,以及诸如使用NFS等的远端磁盘。 Nagios – 网络/服务器监控 Nagios是领先而强大的开源监控系统,他可以让网络/系统管理员在问题影响到正常的业务之前发现并解决它们。 它可以危险警告并指出系统/服务器是否有异常,这可以间接帮助你在问题发生之前采取抢救措施。

    1.2K21发布于 2018-08-30
  • 来自专栏程序猿DD

    6 款 Java 8 自带工具,轻松分析定位 JVM 问题

    这篇文章中介绍下如何使用 JDK 自带工具来分析和定位 Java 程序的问题。 使用 JDK 自带工具查看 JVM 情况 JDK 自带了很多命令行甚至是图形界面工具,帮助我们查看 JVM 的一些信息。 参数的方式不对,-Xms1g 和 -Xmx1g 这两个参数被当成了 Java 程序的启动参数,整个 JVM 目前最大内存是 4GB 左右,而不是 1GB。 因此,当我们怀疑 JVM 的配置很不正常的时候,要第一时间使用工具来确认参数。 参数设置成功了: 图片 继续观察监视面板可以看到,JVM 的 GC 活动基本是 10 秒发生一次,堆内存在 250MB 到 900MB 之间波动,活动线程数是 22。 我们明明配置线程栈最大 256KB 啊,为什么会出现 4GB 这么夸张的数字呢,到底哪里出了问题呢?

    84210编辑于 2022-03-14
  • 来自专栏码农架构

    JVM问题定位 | 查看当前线程信息,查看线程的堆栈?

    这里的cpu使用率与linux 命令top-H-p<pid>的线程%CPU类似,一段采样间隔时间内,当前JVM里各个线程的增量cpu时间与采样间隔时间的比例。 使用参考 当前最忙的前N个线程并打印堆栈: 没有线程ID,包含[Internal]表示为JVM内部线程,参考dashboard命令的介绍。 - thread –all, 显示所有匹配的线程 显示所有匹配线程信息,有时需要获取全部JVM的线程数据进行分析。 为了排查这类问题, arthas提供了thread-b, 一键找出那个罪魁祸首。

    4K20发布于 2021-11-12
领券