最小堆、最大堆内存设为1G,使用G1垃圾回收器,最长的GC暂停时间设为200毫秒,如果时间过长,会相应调整空间的大小(单位是毫秒),新生代最小比例20%,最大比例30%,
- 常规JVM调优:当 Java 线上出现问题,如 CPU 飙升、负载突高、内存溢出等问题,需要查命令,查网络,然后 top、jps、jstat、jstack、jmap、jhat、hprof 等操作。
- 对于OOM Erro dump转储文件、GC日志进行分析,解决问题
- 使用 Arthas 轻松定位,图形化界面、迅速解决,及时止损。
top 查看所有进程的 CPU、内存状态
top -Hp pid 查看指定进程下所有线程的 CPU、内存状态
S0 ---> 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1 ---> 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E ---> 年轻代中Eden(伊甸园)已使用的占当前容量百分比
-
进程和线程的 具体信息
-
jstack 定位线程、进程状况
-
生成dump转储文件,线上系统,内存特别大,jmap执行期间会对进程产生很大影响,甚至卡顿(电商不适合)
dump 文件里,值得关注的线程状态有:
-
死锁,Deadlock(重点关注)
-
阻塞,Blocked(重点关注)
-
本线程肯定是在等待某个条件的发生,来把自己唤醒。其次,SynchronousQueue 并不是一个队列,只是线程之间移交信息的机制,当我们把一个元素放入到 SynchronousQueue 中时必须有另一个线程正在等待接受移交的任务,因此这就是本线程在等待的条件。
设置为服务端模式, 吞吐量优先 -client
错误输出和标准输出,追加到log.out
标准输出至/dev/null ( 空洞 ),只输出错误信息至log
-
指定Xms最小堆,Xmx最大堆的大小,避免每次垃圾回收完成后JVM重新分配内存.
-
最长的GC暂停时间,如果时间过长,会相应调整空间的大小(单位是毫秒)
-
有些时候当设置一个特定的JVM参数时,JVM会在输出“Unrecognized VM option”后终止。如果发生了这种情况,你应该首先检查你是否输错了参数。然而,如果参数输入是正确的,并且JVM并不识别,或许需要设置-XX:+UnlockExperimentalVMOptions 来解锁参数
-
新生代最小比例20%,最大比例30%
-
打印GC、GC详细信息、GC时间戳
-
当出现OOM内存溢出时进行堆转储,并指定具体路径