1)Java heap space/GC overhead limit exceeded
dump分析:启动参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath= 或者jmap -dump:format=b,file=文件名 [pid]
使用mat工具分析heapdump
占用内存较大代码优化
如果内存占用不多:可能是创建了一个大对象导致,根据日志分析创建大对象的时间/jstack分析是否存在死循环
2)PermGen space
调大PermSize
是否动态加载Groovy脚本
是否有动态生成类逻辑,比如使用cglib大量动态生成类
3)Direct buffer memory
默认占用-Xmx相同的内存 //-XX:MaxDirectMemorySize=1G调整
网络通信使用Netty但是未限流
分析代码中是否使用DirectyBuffer未合理控制
4)java.lang.StackOverflowError
调小-Xss使每个线程栈的内存占用减小 //设置每个线程的堆栈大小
调小-Xmx,给栈更多的内存空间
分析代码中是否存在不合理的递归
5)request bytes for Out of swap space
地址空间不够 //64bitos
物理内存不够:jmap -histo:live pid ,如果内存明显减少,说明是directbuffer问题,通过-XX:MaxDirectMemorySize设定
btrace Inflater/Deflater
6)unable to create new native thread
ulimit -a //vim /etc/security/limits.conf添加
* soft noproc 11000
* hard noproc 11000
* soft nofile 5000 //修改限制
* hard nofile 5000 //修改限制
/proc/sys/kernel/pid_max 操作系统线程数限制
/proc/sys/vm/max_map_count 单进程mmap的限制会影响
/proc/sys/kernel/thread-max
/proc/sys/vm/max_map_count
max_user_process(ulimit -u) |
|