JVM调优
前面写了很多篇JVM的知识,落实到实际工作中,调优就是他们整合后的具体输出,前面是基础,调优 是应用,下面我们就来一起分析下调优
一 调优场景
1 高并发业务
某个系统业务量激增,导致Jvm分配的内存远远不够。这时候可以通过多部署几个节点来解决问题。
但是这样做,也会产生一些问题
1) 各个节点并发访问全部的磁盘文件可能会造成IO异常
2) 无法高效使用连接池,内存的问题解决了,但是连接池可能会造成空余浪费
3) 本地缓存造成浪费,多个节点后本地缓存也变成了多份,其实他们都是一样的,
这时可以通过分布式缓存来解决这个问题
2 堆外内存导致溢出错误
某个系统并没有频繁的GC但是却会抛出OOM,最终发现是由于元空间内存不足导致,所以不仅仅要关注
堆中的内存也要关注其他部分的内存有没有溢出
3 调用的服务崩溃导致异常
A项目B项目提供的接口,但是B项目崩溃了,导致A项目调用失败,这样A项目每次调用都会产生异常,
多了之后由于占用空间导致虚拟机进程崩溃,解决方案是通过生产者消费者的队列模式来处理。
4 不恰当的数据结构导致的异常
项目中向HashMap中大量写入数据,由于对象初始创建是放在Edgn区,而Edgn区的对象也应该是招生熄灭的,
但是由于HashMap太大,他就会进入S区,S区再通过复制算法,进行对象年龄的增加,这里面要求Edgn区的对
象尽可能不要太大,这个解决方法就要修改程序了。
二 通过VisualVm工具进行调优
VisualVm是非常有名了JVM调优工具,他的特点是one is all,他可以通过插件来加载很多种jvm调优工具,如jps,jmap等,下面为他的应用界面
这个界面可以看到类的加载情况,Cpu使用率,堆的内存使用情况,线程的情况。
当我们进入这个tab页,我们就看到了堆内存的分代收集,包括可以看到进行了多少次新生代GC,老年代GC,还有编译的时间,类加载的时间,通过查看GC的频率,就可以进行相应的调整。
除了这两个之外,VisualVm还有一些其他的功能,包括线程的监控,堆的运行快照生成等,所以说VisualVm是很好的帮助调优的工具。
三 结语
从JVM的内存结构,写到JVM的垃圾回收算法,再到垃圾回收器,基本上奠定了JVM调优所需要的基础知识,最终看到调优工具中出现的名词,就发现很容易理解了,代码技术总是从Hello world开始,一步一个脚印向前,可能很慢,但是却会很扎实,我是杨乐乐,再技术这条道阻且长的漫漫长路上,期待与大家共同成长。