分析正在运行的JVM内存
# 内存使用排行
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
# CPU使用排行
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
# 查询某个PID的具体内存使用信息(内存镜像)
pmap -d 27959
# 查出某个进程的各线程个资源使用情况
top -p 27959
# 获取进程的堆栈信息
jstack 27959
# 输出正在运行的虚拟机进程
jps -l
# 输出虚拟机进程启动时JVM参数
jps -v
# 监视虚拟机各种运行状态信息,如下图
jstat -gcutil 18269
# 查看和调整虚拟机各项参数
jinfo 5660
分析堆内存快照(Heap Dump)。可以通过设置-XX:+HeapDumpOnOutOfMemoryError 让JVM在发生内存溢出时自动的生成堆内存快照。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof
定位出问题后参考上篇文章几种内存溢出,做相应的处理
发生内存溢出后如何善后
-XX:OnOutOfMemoryError ="sh ~/cleanup.sh"
程序不会发生内存溢出而挂掉,但是运行很慢怎么办
你可能需要关注下“代码缓存”是否溢出,因为这个内存溢出只会给出一个警告,并停用JIT,字节码将不再会被编译成机器码,执行速度大幅度降低。
-XX:InitialCodeCacheSize and -XX:ReservedCodeCacheSize