1、面试题
线上jvm如何配置的?
- server -Xms512m -Xmx512m -Xss1024KXX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly
2、面试官心里分析
这块说实话,其实就是一样的,看看你到底玩儿没玩儿线上系统的jvm配置,如果你是培训班儿刚出来的,绝对会被这些线上问题的解决处理的提问给难住,然后一看就是没实际玩儿过,那你就糟糕了。或者如果你一直就是负责开发,没弄过线上系统jvm配置,那也肯定是不行的。
3、面试题剖析
上一节课已经看了吧,各位同学,最起码的就是OOM自动导出内存快照,还有打印gc日志,都是必须加的,因为这是线上系统jvm常见的问题。然后我们来解释别的常用参数。
- server -Xms4g -Xmx4g -Xss256kXX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/heap/dump -XX:+PrintGCTimeStamps -XX:+PrintGCDeatils -Xloggc:<filename>
- server:必须得加,因为你是服务端程序,用-server启动较慢,但是启动后性能会更好
- Xms4g:堆内存的初始大小是4g,一般我们线上常用的普通应用系统是4核8G的虚拟机,足够了,所以一般堆内存给4g,稍微留点富裕,毕竟操作系统自己也要用内存的
- Xmx4g:堆内存的最大大小是4g,一般就是跟初始大小是一样的,一般不建议设置比-Xms4g大,因为导致运行时动态增加堆内存,会有问题
- Xss256k:栈内存大小,这个一般设置成256k就差不多够了,毕竟主要内存都是放堆里的,栈里就是一些变量什么的
- XX:PermSize=512m,这是永久代大小,这是放加载的类之类的东西的,一般设置512m是足够了,太小了,有的时候在就是那种动态生成字节码的场景下,可能会有问题
- XX:MaxPermSize=512m,这就是永久代的最大大小,一般就跟上面那个一样就行了
XX:MaxTenuringThreshold=20:这个就是说新生代里多少次没回收掉就进入老年代
XX:CMSInitiatingOccupancyFraction=80,设置老年代占用多大比例后触发cms垃圾回收
XX:+UseCMSInitiatingOccupancyOnly,这个跟上面那个参数配合起来使用,就是说仅仅使用上面指定的那个比例,否则不指定这个参数,jvm第一次使用上面那个比例后,后续会自动调整那个比例