Java 性能问题的查找

GC日志分析神器-GCEasy详解 前言 GCEasy是一款非常好用的在线分析GC日志的工具,打开官网,直接上传gc日志,也可以更加上门的要求进行压缩上传。 JVM memory size(jvm内存大小区域) JVM memory size ,GCEasy展示了年轻代、老年代、元空间。JVM给分配的大小和程序运行过程中使用的峰值大小。 从JVM memory size展示的信息,我们可以判断是否需要做下面的几件事情。 是否需要修改JVM内存(-Xms、-Xmx、-Xmn…)相关配置,比如年轻代和老年代峰值远远小于分配的大小,这个时候我 阅读详情

还是转载过来方便自己以后查看,网摘里的东西太多啦,也不好找。

原文地址:http://blog.youkuaiyun.com/fenglibing/article/details/7191302


1、发现问题
1)、使用w命令查看CPU的Load情况, Load越高说明问题越严重;
2)、 使用jstat查看FGC发生的频率及FGC所花费的时间, FGC发生的频率越快、花费的时间越高,问题越严重;

2、导出数据:在应用快要发生FGC的时候把堆导出来
1)、查看快要发生FGC使用命令:
jmap -heap <pid>
会看到如下图结果:

    以上截图包括了新生代、老年代及持久代的当前使用情况, 如果不停的重复上面的命令,会看到这些数字的变化, 变化越大说明系统存在问题的可能性越大, 特别是被红色圈起来的老年代的变化情况。 现在看到的这个值为使用率为99%或才快接近的时候, 就立即可以执行导出堆栈的操作了。
    注:这是因为我这里没有在jvm参数中使用"-server" 参数,也没有指定FGC的阀值, 在线上的应用中通过会指定CMSInitiatingOccup ancyFraction这个参数来指定当老年代使用了百分之多 少的时候,通过CMS进行FGC, 当然这个参数需要和这些参数一起使用“-XX:+ UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+ UseCMSCompactAtFullCollection -XX:+ UseCMSInitiatingOccupancyOnly” , CMSInitiatingOccupancyFraction 的默认值是68,现在中文站线上的应用都是70, 也就是说当老年代使用率真达到或者超过70%时, 就会进行FGC。
    2)、将数据导出:
jmap -dump:format=b,file=heap.bin <pid>
这个时候会在当前目录以生成一个heap. bin这个二进制文件。

3、通过命令查看大对象
也是使用jmap的命令,只不过参数使用-histo
使用:jmap -histo <pid>|less
可得到如下包含对象序号、某个对象示例数、当前对象所占内存的大小、当前对象的全限定名,如下图:

查看对象数最多的对象,并按降序排序输出:
执行:jmap -histo <pid>|grep alibaba|sort -k 2 -g -r|less
结果如图:

查看占用内存最多的最象,并按降序排序输出:
执行:jmap -histo <pid>|grep alibaba|sort -k 3 -g -r|less
结果如图:


4、数据分析
这个时候将dump出的文件在ECLIPSE中打开, 使用MAT进行分析(ECLIPSE需要先安装MAT插件), 会展示如下截图:

可以从这个图看出这个类java.lang.ref. Finalizer占用500多M, 表示这其中很多不能够被回对象的对象, 此时点开hisgogram视图,并通过Retained Heap进行排序,如下截图:

从图中可以看出,被线线框圈起来的三个对象占用量非常大, 那说明这几个大的对象并没有被释放, 那现在就可以有针对性的从代码中去找这几个对象为什么没有被释放 了。
再切换到dominator_tree视图:

这里可以看到velocity渲染也存在着问题, 以及数据库的请求也比较多。

5、优化
优化的思路就是上面所列出来的问题,查看实现代码中所存在问题,具体问题具体分析。



算法之Java算法性能分析:增长数量级与算法优化 在编程的学习道路上,理解算法的性能是提升编程能力的关键一环。今天,我们一同深入学习Java中算法性能分析相关知识,从增长数量级的分类,到如何设计更快的算法,希望能和大家共同进步,让我们的编程技能更上一层楼! 阅读详情

相关推荐

Java进阶-第四十四篇:Java性能调优 - 代码层面优化 - 算法优化(下)

在Java性能调优的代码层面优化中,算法优化是提升程序效率的核心手段。除了基础的优化思路,高级算法优化技巧能进一步挖掘算法潜力。同时,通过实际项目案例可以直观感受优化效果,并思考如何平衡性能与代码可读性。

无 177

JVM命令之 jstat:查看JVM统计信息

其中vmid是进程id号,也就是jps之后看到的前面的号码,如下: option参数 -gc 新生代相关 S0C是第一个幸存者区的大小(字节) S1C是第二个幸存者区的大小(字节) S0U是第一个幸存者区已使用的大小(字节) S1U是第二个幸存者区已使用的大小(字节) EC是Eden空间的大小(字节) EU是Eden空间已使用大小(字节) 老年代相关 OC是老年代的大小(字节) OU是老年代已使用的大小(字节) 方法区(元空间)相关 MC是方法区的大小 MU是方法区已使用的大小 CCSC是压缩类空间的大小

张俊杰 的博客 2334

超详细版!Obsidian+Claude+Skills+云同步,打造智能 AI 知识库

本文介绍如何搭建高效的AI知识管理系统,将Obsidian笔记工具与ClaudeAI助手深度整合。通过ClaudeCode安装配置、ObsidianSkills插件添加和坚果云同步设置,实现本地存储安全性与云端便捷性的完美结合。该系统支持智能笔记整理、知识图谱可视化、智能搜索问答和内容创作辅助等功能,使静态笔记转变为能自动分析关联、处理复杂结构的"活"知识库。详细步骤包括工具准备、环境配置、插件安装和云同步设置

2301_79998006的博客 1078

性能问题的查找

1、发现问题 1)、使用w命令查看CPU的Load情况,Load越高说明问题越严重; 2)、使用jstat查看FGC发生的频率及FGC所花费的时间,FGC发生的频率越快、花费的时间越高,问题越严重; 2、导出数据:在应用快要发生FGC的时候把堆导出来 1)、查看快要发生FGC使用命令: jmap -heap 会看到如下图结果:     以上截图包括了新生代、

冯立彬的博客 8154

别再只放按钮了!巧用微信小程序‘长按识别’功能,打造无缝加群体验

本文深入探讨了微信小程序'长按识别'功能在社群运营中的创新应用,通过简化加群流程至一步操作,显著提升用户转化率。文章详细解析了技术实现细节、UI/UX设计策略,并对比了与企业微信API的适用场景,为开发者提供打造无缝加群体验的完整解决方案。

weixin_42627853的博客 434

SAP MM 物料描述MAKTX 40个字符不够用的问题处理

SAP物料描述表,长度40个字符一般情况下,40个字符在描述中也够用了,但是要加上规格之类的额外描述就不一定了,特别是对于辅助件-刀具。解决方案一:对maktx增强,换成CHAR80或者CHAR100的,但是风险较大,涉及到好多地方,另外SAP+ 算号器 也不支持。解决方案二:增强字段。内部顾问,建议在 那就在这里加一个字段,具体过程如下:1、创建域2、创建架构3、附加架构4、GUI 设置 5、后台设置6、MASS/MM17字段新增。过程1、创建域 SE112、创建结构 se11 3、MARA附加架构

GAVIN 4728

jstat查看gc情况

jstat通常用来分析系统的垃圾回收情况。 1)命令: jstat -gccause pid 2000 #每格2秒输出结果 或 jstat -gcutil pid 2000 2)分析: S0、S1 代表两个Survivor区; E 代表 Eden 区; O(Old)代表老年代; P(Permanent)代表永久代; YGC(Young GC)代表Minor GC; YGCT代表Minor GC耗时; FGC(Full GC)代表Full GC耗时; GCT代表Minor & ...

大JAVA解决方案 1万+

GitLab教程(四):分支(branch)和合并(merge)

命令进行合并时,Git具备一定的智能自动化处理能力:如果一个分支仅修改了文件A,而另一个分支独立地修改了文件B,Git能够无缝整合这些更改,自动完成合并过程——即最终的代码既包含了对A文件的修改也包含了对B文件的修改。同样地,若两个分支虽然都修改了同一个文件,但涉及的是文件中互不重叠的部分,比如一个改动发生在第一行,另一个则在第二行,Git同样能巧妙地自动合并这些非冲突性修改。获取了远程分支的最新变化,或者当你想要合并本地的一个分支到当前分支时,就会用到这个命令。,默认会尝试合并远程分支到当前分支。

TracyCoder的博客 7885

JVM中工具jstat的使用

jstat命令命令格式: jstat [Options] vmid [interval] [count] 命令参数说明: Options,一般使用 -gcutil 或 -gc 查看gc 情况 pid,当前运行的 java进程号 interval,间隔时间,单位为秒或者毫秒 count,打印次数,如果缺省则打印无数次 Options 参数如下: -gc:统计 jdk gc时 h...

qq_20004115的博客 1006

【Block总结】DiffAttention,差分注意力融入CLIP架构,抑制噪声,增强对相关特征的关注|即插即用

DiffCLIP通过微小的结构改动实现了显著的性能提升,为多模态模型的轻量化与高效化提供了新范式。

AI浩 1561

华为昇腾(Ascend)开发考试原题目解析 (2024) (题库一)——HCIP-AI-Ascend Developer——第一部分

给出一段代码如下,以下哪个选项描述错误?...A.中的语句由 MindSpore 接管,有语法限制B. 算子在中定义,并用来建立网络C.__init__()中的语句由 Python 解析执行D. 网络定义必须继承基类nn.Cell正确答案: B__init__()用于定义算子和网络层。所有需要用到的层(如卷积层、全连接层等)都应该在这里进行实例化。这部分代码由Python解释器执行。用于构建前向计算图。它调用在__init__()中定义好的算子和层来描述数据的流向。

qq_38334677的博客 1053

java性能问题的查找

1、发现问题 1)、使用w命令查看CPU的Load情况,Load越高说明问题越严重; 2)、使用jstat查看FGC发生的频率及FGC所花费的时间,FGC发生的频率越快、花费的时间越高,问题越严重; 2、导出数据:在应用快要发生FGC的时候把堆导出来 1)、查看快要发生FGC使用命令: jmap -heap 会看到如下图结果:

像个孩子壹洋 734

1、深入解析OTA/gm - C滤波器架构与设计

本文深入探讨了OTA/gm-C滤波器的架构与设计方法,涵盖了从基本构建模块到高阶滤波器实现的多种技术。重点分析了双积分器环路结构(如Tow-Thomas和KHN滤波器)的工作原理、性能特点及OTA非理想特性对滤波器的影响,并介绍了降低寄生效应、提升动态范围的方法。文章还讨论了基于LC梯形仿真、多环反馈和电流模式的gm-C滤波器设计,以及自动调谐技术在频率稳定性中的应用。最后总结了不同类型gm-C滤波器的优缺点及其适用场景,为高频集成连续时间滤波器的设计提供了全面的技术参考。

fanta的博客 185

线上查找Java性能问题三部曲

1、top 查找负载高的进程 找到java负载比较高的java进程的pid (30813) 2、top -Hp (30813) 进程号 找到该进程对应的所有的线程号 ,讲线程号转成16进制 3、jstack 30811 | grep -A 10 785d 查看这个线程卡在哪里了,在去找相应的代码。 ps:一般还要找到这个进程下处于runnable的线程 看下他再做什么...

iphone4grf的博客 261

数据结构(超详细讲解!!)第十七节 队列应用(杨辉三角)

杨辉三角

2201_76115387的博客 1375

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

windows下查找java应用占用CPU过高问题

最近在测试一个用java语言实现的数据采集接口时发现,接口一旦运行起来,CPU利用率瞬间飙升到85%-95%,一旦停止就恢复到40%以下,这让我不得不面对以前从未关注过的程序性能问题。 在硬着头皮查找资料定位错误修正bug的过程中参考了下面两篇文章: windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码:http://blog.youkuaiyun.com/hexin373

ningzuobei的专栏 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java 查找问题的几种方法

在Java开发过程中,查找和解决问题是日常工作中非常重要的一部分。

qq_33240556的博客 511

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java:实现插值查找算法(附带源码)

Java:实现插值查找算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1032

Linux中查找最耗性能的JAVA代码

在这里总结一下查找Linux、Java环境下最耗CPU性能的代码段的方法。基本上原理就是使用top命令查看最耗cpu的进程和线程(子进程)。使用jstack把java线程堆栈给dump下来。然后,在堆栈信息中查找出对应的代码块。具体操作如下: 一、查找最耗cpu的进程 执行:top 输出: PID USER PR NI VIRT RES SHR S %CPU ...

振宇要低调 146

Java:实现二分查找算法(附带源码)

Java:实现二分查找算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1144

java:实现泛型化的折半查找法(附带源码)

java:实现泛型化的折半查找法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1995

linux查看java服务线程

我整理的一些关于【java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1在Linux中查看Java服务线程的完整指南 对于刚入行的开发者来说,了解如何在Linux环境下查看Java服务线程是一个基本且重要的技能。本篇文章将帮助你们彻底理解这个过程,并提供详细的...

weixin_33976326的博客 286

Java中的反射性能优化:如何避免反射带来的性能瓶颈

反射是一种强大的机制,允许程序在运行时动态地操作类和对象,但由于它的动态性,也带来了一定的性能开销。等技术优化反射性能,但从根本上讲,频繁使用反射仍然会影响系统的整体性能。因此,优化反射性能的另一个方向是在设计上尽量减少反射的使用。例如,针对某些业务场景,可以通过静态代理或动态代理替代反射,或者在应用启动时进行预处理来避免频繁的反射调用。虽然反射提供了很大的灵活性,但在不必要的场景下避免使用它可以显著提升性能。为了减少每次反射调用时方法查找的开销,我们可以通过缓存反射获取的。,避免了重复的查找操作。

微赚开发者技术分享博客 1137

JVM问题查找

问题已经解决,把常用命令在这里记一下,省得每次去查。 1、top 使用top查找到负载较高的进程,第一个就是。 如图,查找到的PID为:31749 小技巧:打开top后,键入小写c出现应用名,键入大写P按CPU排序,键入大写M按内存排序 2、jstack 31749 &gt; stack.txt 生成Java线程栈信息到文件stack.txt,其实可以在线看的,但是为了便于分析还是...

wangfei0904306的博客 789

根据Map的值查找对应的键(Java实现)

根据Map的值查找对应的键(Java实现)

道友 581
上一篇: Integer类型 == 比较
下一篇: Lucence全文索引与数据库索引
feiyu8607
博客等级 码龄18年 26粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值