文章目录本文来说下JVM调优实战相关的几个问题
- 你在项目中都使用了哪些参数打印GC
- 常用的调优工具有哪些
- 如果有一个系统,内存一直消耗不超过10%,但是观察GC日志,发现FGC总是频繁产生,会是什么引起的
- 线上一个系统跑一段时间就栈溢出了,怎么办
- 系统CPU经常100%,如何调优
- 系统内存飙高,如何查找问题
- 大型项目如何进行性能瓶颈调优
你在项目中都使用了哪些参数打印GC
具体的参数名称记不清楚了,但是我一般在项目中输出详细的 GC 日志,并加上可读性强的 GC 日志的时间戳。特别情况下我还会追加一些反映对象晋升情况和堆详细信息的日志,这些会单独打到gc.log文件中用来排查问题。另外,OOM 时自动 Dump 堆栈,我一般也会进行配置。
常用的调优工具有哪些
如果有一个系统,内存一直消耗不超过10%,但是观察GC日志,发现FGC总是频繁产生,会是什么引起的
检查下系统是否存在System.gc() ;
线上一个系统跑一段时间就栈溢出了,怎么办
线上一个系统跑一段时间就栈溢出了,怎么办
- 首先检查下是否有死归这种无限递归的程序或者递归方法太多
- 可以看下栈大小,若太小则可以指定-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软件)
大型项目如何进行性能瓶颈调优
大型项目如何进行性能瓶颈调优
- 数据库与SQL优化:一般dba负责数据库优化,比如集群主从等。研发负责SQL优化,比如索引、分库分表等。
- 集群优化:一般OP负责,让整个集群可以很容易的水平扩容,再比如tomcat/nginx的一些配置优化等。
- 硬件升级:选择最合适的硬件,充分利用资源。
- 代码优化:很多细节,可以参照阿里巴巴规范手册和安装sonar插件这种检测代码质量的工具。也可以适当的运用并行,比如CountDownLatch等工具。
- jvm优化:内存区域大小设置、对象年龄达到次数晋升老年代参数的调整、选择合适的垃圾收集器以及合适的垃圾收集器参数、打印详细的GC日志和oom的时候自动生成dump。
- 操作系统优化



