首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏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
  • 来自专栏玩转JavaEE

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

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

    62310编辑于 2022-03-14
  • 来自专栏四火的唠叨

    JVM 问题定位工具

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

    55210编辑于 2022-07-15
  • 来自专栏程序猿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 这么夸张的数字呢,到底哪里出了问题呢?

    84410编辑于 2022-03-14
  • 来自专栏菩提树下的杨过

    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管控)

    86410发布于 2020-03-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:显示网络

    52041编辑于 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 和对象的创建-分配-定位-布局 6. 对 JVM 参数的优化及说明 1)可增大年轻代或者 Survivor 区的存储空间,减少 Young GC 的次数。 小结 通过三步法定位线上环境 JVM 问题,如频繁 Full GC 、内存泄漏或发生 OOM 现象,即将 GC 日志、Dump 文件及 APM 监控系统结合在一起观察分析,寻找出问题产生的根本原因,然后才能对症下药 ,真正解决系统存在的问题或是隐患,使系统性能更稳健,响应更快,从而使用户体验更佳。

    3.4K31发布于 2020-04-02
  • 来自专栏FunTester

    6个重要的JVM性能参数

    在本文中,重点介绍了六个重要的JVM参数,在Java性能测试中起着非常重要的作用。 -Xmx和-XX:MaxMetaspaceSize -Xmx可能是最重要的JVM参数。 堆大小在影响应用性能和所需物理硬件需求。这带来了一个问题,我的应用程序正确的堆大小是多少?我应该为应用程序分配大堆大小还是小堆大小?答案是:取决于需求和预算。 将-Xms和-Xmx设置为相同值的会提高JVM性能 元空间是将存储JVM的元数据定义(例如类定义,方法定义)的区域。 现在,让我们看一下有问题JVM的堆使用情况图: ? 您可以注意到,在图表的右端,即使GC反复运行,内存利用率也没有下降。这是一个典型的内存泄漏迹象,表明该应用程序正在存在某种内存问题。 -XX:+ HeapDumpOnOutOfMemoryError,-XX:HeapDumpPath OutOfMemoryError是一个严重的问题,它将影响您的应用程序的可用性和性能

    1.4K20发布于 2020-04-02
  • 来自专栏后端精进之路

    JVM性能优化系列-(6) 晚期编译优化

    6. 晚期编译优化 晚期编译优化主要是在运行时做的一些优化手段。 虚拟机默认采用解释器与其中一个编译器直接配合的方式工作 由于即时编译器编译本地代码需要占用程序运行时间,要编译出优化程度更高的代码,所花费的时间可能更长;而且想要编译出优化程度更高的代码,解释器可能还要替编译器收集性能监控信息 HotSpot虚拟机采用分层编译(Tiered Compilation)的策略,其中包括: 第0层:程序解释执行,解释器不开启性能监控功能(Profiling),可触发第1层编译 第1层:也称为C1编译 ,将字节码编译为本地代码,进行简单、可靠的优化,如有必要将加入性能监控的逻辑 第2层:也称为C2编译,也是将字节码编译为本地代码,但是会启用一些编译耗时较长的优化,甚至会根据性能监控信息进行一些不可靠的激进优化 由于java语言中访问数组元素时,系统将会自动进行上下界的范围检查,这必定会造成性能负担。为了安全,数组边界检查是必须做的,但数组边界检查是否必须一次不漏的执行则是可以“商量”的事情。

    49410编辑于 2023-10-19
  • 来自专栏小豪成长日记

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

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

    44630编辑于 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 进程号   查看当前进程有哪些线程   初步定为排查线程的健康状况, 如果有很多线程处于等待状态 jmap -histr 3806 | head 10000 > 1.txt    把10000行数据打印到文件进行分析. 6. arthas 在线排查工具   这是今天讲的重点. 很重要的一个方面, 加日志. ---- 常见的GC问题  1. java启动时如何设置jvm的日志   java -Xloggc:/root/1.txt    这个命令是把jvm日志打印到/root/1 看看哪些类实例最多, 这样内存和cpu居高不下. ---- 扩展阅读 整理这个文件的时候, 想起之前同事整理的一篇在spring cloud环境下,如何通过spring boot actuator来定位线上问题

    1.5K30编辑于 2022-05-09
  • 来自专栏半旧的技术栈

    JVM揭秘之旅:打破性能瓶的终极指南(6)

    专栏简介 「为什么Java程序员必须啃透JVM?」 JVM是Java生态的“灵魂引擎”,但多数开发者仅停留在API调用层面。 本专栏将带您穿透技术迷雾,系统攻克JVM核心领域: ⚙️ 硬核原理拆解:从字节码执行、类加载双亲委派,到G1/ZGC回收器设计,逐层剖析JVM的运作机制; ️ 调优实战手册:结合大厂案例,详解参数配置 (如-XX:+HeapDumpOnOutOfMemoryError)、内存泄漏定位(MAT工具)、并发瓶颈破解; 前沿技术追踪:涵盖元空间、JIT编译、协程(Loom项目)等新特性,提前掌握未来技术栈 ; 面试高频攻略:深度解析京东/华为等大厂JVM面试题(如“CMS与G1的权衡”“内存屏障作用”)6,8。 适合读者: ✅ 渴求突破CRUD的Java工程师 ✅ 被性能问题困扰的架构师 ✅ 备战P7/P8级技术面试的求职者 专栏承诺:不用空洞理论堆砌,每篇均附可复现的代码案例及调优脚本。

    20810编辑于 2025-07-30
  • 来自专栏JavaGuide

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

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

    1.4K10发布于 2020-05-07
  • 来自专栏咸鱼学Python

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

    而对于不同的表结构,采用不同的SQL语句,性能上可能千差万别。本文,就基于MySql数据库,来介绍一下如何定位SQL语句的性能问题。 对于低性能的SQL语句的定位,最重要也是最有效的方法就是使用执行计划。 包含子查询最外层查询就显示为 PRIMARY 3 SUBQUERY 在select或 where字句中包含的查询 4 DERIVED from字句中包含的查询 5 UNION 出现在union后的查询语句中 6 简化SQL语句的重要方法就是采用临时表暂存中间结果,这样可以避免程序中多次扫描主表,也大大减少了阻塞,提高了并发性能。 t where num=10 union all select id from t where num=20 --替代 select id from t where num=10 or num=20 6

    1.6K30发布于 2020-07-21
  • 来自专栏流柯技术学院

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

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

    1.2K21发布于 2018-08-30
  • 来自专栏iSharkFly

    Confluence 6 垃圾收集性能问题

    这个需要额外的手工调整和测试,通常这个会降低系统的性能。 使用一个小的 heap 在不出现 OutOfMemory 错误的情况下,保持你的 heap 尽可能的小。 在绝大部分情况下,能够保证 JVM 为你提供更好的性能。 如果你的 JVM 中添加了参数,当在垃圾收集的时候遇到了困难。 那么我们建议你删除掉你在 GC 前添加的参数,除非你添加的这些参数是为了解决一些特定的问题。你现在应该考虑如何避免在 GC 中出现的问题,而不是导致其他的问题。 这个页面将会知道你如何达到你自己期望的性能指标(throughput/footprint/latency)和如何进行调整。 https://www.cwiki.us/display/CONF6ZH/Garbage+Collector+Performance+Issuese

    58130发布于 2019-01-30
  • 来自专栏码农架构

    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
  • 实时性能监控不再难!Ubuntu部署Netdata助你轻松定位性能问题

    这时候,你多么希望能有一个好用的工具来帮你快速定位问题所在!别担心,今天我要介绍的 Netdata 就非常不错。Netdata 是一个实时系统监控工具,可以帮助你在遇到性能问题时迅速找到解决方案。 它不仅可以监控硬件层面的各种指标(如 CPU、内存、磁盘使用率),还可以监控各种应用程序和服务的性能指标。通过简洁直观的可视化界面,你可以一目了然地了解系统的运行状态。 开箱外警报附带数百个开箱即用的警报,用于检测常见问题和陷阱,揭示容易被忽视的问题。它支持多种通知方法,让您知道何时需要您的关注。 6.固定 Netdata 公网地址由于以上使用 cpolar 所创建的隧道使用的是随机公网地址,24 小时内会随机变化,不利于长期远程访问。 希望这篇文章能帮助你在遇到性能问题时迅速找到解决方案!

    85700编辑于 2024-12-16
领券