栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM实战调优

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM实战调优

本文来说下JVM调优实战相关的几个问题

文章目录
  • 你在项目中都使用了哪些参数打印GC
  • 常用的调优工具有哪些
  • 如果有一个系统,内存一直消耗不超过10%,但是观察GC日志,发现FGC总是频繁产生,会是什么引起的
  • 线上一个系统跑一段时间就栈溢出了,怎么办
  • 系统CPU经常100%,如何调优
  • 系统内存飙高,如何查找问题
  • 大型项目如何进行性能瓶颈调优


你在项目中都使用了哪些参数打印GC

具体的参数名称记不清楚了,但是我一般在项目中输出详细的 GC 日志,并加上可读性强的 GC 日志的时间戳。特别情况下我还会追加一些反映对象晋升情况和堆详细信息的日志,这些会单独打到gc.log文件中用来排查问题。另外,OOM 时自动 Dump 堆栈,我一般也会进行配置。


常用的调优工具有哪些


如果有一个系统,内存一直消耗不超过10%,但是观察GC日志,发现FGC总是频繁产生,会是什么引起的

检查下系统是否存在System.gc() ;


线上一个系统跑一段时间就栈溢出了,怎么办

线上一个系统跑一段时间就栈溢出了,怎么办

  1. 首先检查下是否有死归这种无限递归的程序或者递归方法太多
  2. 可以看下栈大小,若太小则可以指定-Xss参数设置栈大小

系统CPU经常100%,如何调优

CPU100%,那肯定是有线程一直在占用着系统资源,所以具体方法如下:

  • 找出哪个进程cpu占用高(top命令)
  • 该进程中的哪个线程cpu占用高(top -Hp $pid命令)
  • 将十进制的tid转化为十六进制(printf %x $tid命令)
  • 导出该线程的堆栈 (jstack p i d > pid > pid>pid.log命令)
  • 查找哪个方法(栈帧)消耗时间 (less $pid.log)
  • 可以确认工作线程占比高还是垃圾回收线程占比高
  • 修改代码

系统内存飙高,如何查找问题

系统内存飙高,如何查找问题

  • 找出哪个进程内存占用高(top命令)
  • 查看jvm进程号(jps命令)
  • 导出堆内存 (jmap命令生成dump文件,注意:线上系统,内存特别大,jmap执行期间会对进程产生很大影响,甚至卡顿,所以操作前最好先从负载均衡里摘掉。)
  • 分析dump文件 (比如mat软件)

大型项目如何进行性能瓶颈调优

大型项目如何进行性能瓶颈调优

  1. 数据库与SQL优化:一般dba负责数据库优化,比如集群主从等。研发负责SQL优化,比如索引、分库分表等。
  2. 集群优化:一般OP负责,让整个集群可以很容易的水平扩容,再比如tomcat/nginx的一些配置优化等。
  3. 硬件升级:选择最合适的硬件,充分利用资源。
  4. 代码优化:很多细节,可以参照阿里巴巴规范手册和安装sonar插件这种检测代码质量的工具。也可以适当的运用并行,比如CountDownLatch等工具。
  5. jvm优化:内存区域大小设置、对象年龄达到次数晋升老年代参数的调整、选择合适的垃圾收集器以及合适的垃圾收集器参数、打印详细的GC日志和oom的时候自动生成dump。
  6. 操作系统优化
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号