背景
- AWS EC2
t3.medium实例,Amazon Linux 2 系统,4GB 内存。 - Java 启动时 Heap 的配置为
-Xmx2847m,大概是给其他服务留 1G 左右内存,其余全部分配给 JVM 。 - 结合日志和后台监控发现频繁出现 OOM 导致 Tomcat 重启的问题。
问题
- 现在每个实例的平均内存使用率在 93% 左右,此现象是否正常?
- 保持当前 EC2 实例配置不变的情况下,给 JVM Heap 分配多大内存比较合适?有什么可以拿来当作判断的依据吗?
- 除了 Heap 之外,JVM 还有 Metaspace 、CodeCache 、DirectByteBuffers 等等,这些 Heap 之外的部分可能吃掉多少内存?有什么可以拿来当作判断的依据吗?
- 如何分析 OOM 可能的情况?
/usr/share/tomcat目录下有个hs_err_pid前缀的日志文件,似乎在 OOM 时会输出相关错误信息,但根本看不懂……
一年后端经验的 CRUD Boy 没系统学过 Java ,不了解 JVM ,突然让去解决 OOM 的问题,实在懵逼,不知从何下手,请各位 Java 大佬们给点建议,救救本菜,谢谢大家!
