前言
内存爆炸、OOM,CPU过高,线上程序反应太慢等问题,作为一个程序员这些问题每个人都有耳闻,但是细想一下又离我们很遥远,很多人好几年可能都没遇到过一次。
线上问题不容易碰到,但是碰到了不能解决就来不及了,就算没碰到自己不会解决心理也会很慌,所以一起学习吧
一、 内存配置说明
1.1 生产环境内存一般是多大?
内存一般是 6-16GB,内存过高对于JVM垃圾回收机制也会有不同,所以内存不是越大越好,当然处理大数据时内存有可能会配置比较高
1.2. JVM内存占用
我们都知道java服务器的内存大小设置参数:-Xmx 和 -Xms ,但是服务器启动时,并不会立马去申请最大内存数的内存,而是内存不够是才会去申请。通过添加参数: -XX:+AlwaysPreTouch 让服务器启动的时候就会去申请最大内存,减少再去申请内存时造成的消耗(小优化,作用不大)
二、 常见内存问题
2.1. 频繁调用GC
无论哪种GC策略,肯定都是要占用系统资源的(Stop the World),影响用户程序的执行,频繁调用gc这个问题应该在测试阶段就要被发现。采用server模式运行,加上打印GC日志参数:-XX:PrintGCDetails -Xloggc:gc.log,,添加该参数后gc日志会打印在在一个gc.log的文件中,我们就可以看到gc被调用的情况,很容易就能知道gc调用是否过多。