我们在我们Server的gc log上经常看到下面的这个日志:
总结一下各个字段表达的是什么意思: Young GC
Full GC:
top -H -P $PID 动态查看java线程的消耗情况
top -H -b -n 1 -p $PID 打印一次java线程情况
jstack $PID 打印当前运行的java线程栈信息(建议打印2,3次)
jstat -gcutil $PID <毫秒数> 动态的观察jvm内存各区情况,主要看下FGC与YGC的使用情况!
jmap -dump:format=b,file=./heapdump.bin $PID dump java的堆栈信息,会影响线上的性能
一次CMS GC问题排查过程(理解原理+读懂GC日志)参见:http://iamzhongyong.iteye.com/blog/1989829
JVM优化目标:垃圾收集器中吞吐量和低延迟(GC回收时间)这两个目标其实是存在相互竞争的矛盾,因为如果选择以吞吐量优先,那么降低内存回收的执行频率则是必然的,但这将会导致GC需要更长的暂停时间来执行内存回收。相反如果是选择以低延迟优先,那么为了降低每次执行内存回收时的暂停时间,只能够频繁地执行内存回收,但这又引起了新生代内存的缩减和导致程序吞吐量的下降。