JVM优化
在项目启动时加上以下参数:
-Xms8G -Xmx8G -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:/gc.log
java -jar -Xms8G -Xmx8G -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:/gc.log jetlinks-standalone.jar
❗ 警告
注意堆内存大小请根据自身服务器的实际情况分配,此处分配8G只是示例。
JVM优化是最后的手段,非必要极限使用服务器性能应考虑其他优化手段。
问题定位
建议配置内存溢出时自动dump:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof
在运行过程中,发生内存溢出,或者cpu过高时.
- 查看日志是否有大量的日志输出,如果有,根据日志内容来分析.
- 使用
jps
命令查看进程pid
,执行jstack -l [pid]
.查看是否有被BLOCKED
,或者调用栈比较长的线程,根据调用栈分析对应的代码. - 使用
async profiler
或者Arthas来收集火焰图,分析调用栈耗时情况.
在本地可以使用Idea
提供的Profiler
来监控.