首先,jvm调优,包括两种情况,一种是系统发生了OOM异常,这种情况,导出堆的dump日志,然后用MAT技术分析即可。一般MAT会自动分析出问题,查找代码,进行修改即可。
另一种情况是,没有发生OOM,但是,要对jvm进行调优,使jvm的使用达到最优。
这种情况,就需要用top命令,查出占用CPU或内存过高的java进程。
然后,用jstack命令查询线程情况,一个是查询是否有死锁。另一个是注意处于wating和blocking状态的线程,看一下是哪个线程阻塞了。
如果不是线程的问题,就用jstat命令查询GC发生的时间和频率,以及新生代和老年代剩余空间,以此来判断是否需要优化新生代和老年代的内存。
再有一种优化的情况就是,考虑业务场景,主动对jvm进行优化,比如秒杀系统,就要提前规划好,新生代大概多少M对象,老年代大概多少M对象,然后适当增大新生代空间,来减少老年代GC频率和避免大对象直接进入老年代等。