网站首页 > 文章精选 正文
今天上午,产品同学反馈,服务出现异常, 但是稍等一会就又自动恢复了。一个研发同学跟了半天,他说从后台日志看,没有发现业务异常,不知道该怎么定位了。
然后找我帮忙一起定位下问题,这种问题,感觉不太像业务代码的问题,毕竟业务代码的异常是可以稳定复现的, 于是我先打开云服务器的监控看板, 发现现在内存占比长时间保持在 99% , 服务重启了 3次。 猜测可能是因为内存不足导致 OOM Killer 强制终止进程,导致重启。
使用命令 jstat 进行了排查,发现其实 Eden 区 和 老年代的内存占比并不高,而且YGC, FGC 也不频繁,比较合理。
继续排查内存问题,然后查看到服务器内存是 16g , 而 jvm 的堆内存设置了 15g。 这时候感觉到了困惑,是不是堆内存占比太高了? 导致预留的系统内存, 堆外内存不够处理而触发了 重启?
一般服务的堆内存设置为物理内存的 80%,而这时候我们的jvm设置已经是 91.5% 了。这显然是不合理的,于是自己查看 jvm 的相关配置,发现新生代的占比配置也偏高。 拉队友沟通得知,当时这个jvm的配置是另一个项目的,这个新项目就原封不动的copy 了 另一个项目的配置。最后,我们修改了jvm 堆内存占比,以及进行了参数优化,最后经过观察,无异常。
所以,jvm 的配置还是要根据物理机的配置,结合项目自己的特性来定。 不能无脑 copy 其他项目的配置。 当然对于这个问题的排查还是需要有一定的经验和知识储备,不然给一个新手,都不知道如何下手了。
猜你喜欢
- 2025-07-23 JVM中哪些是线程共享区,哪些是线程独占区
- 2025-07-23 线上服务 FGC 问题排查,看这篇就够了
- 2025-07-23 JVM运行时内存区域、堆内存分段机制
- 2025-07-23 JVM运行数据区深度解析(jvm运行时区域)
- 2025-07-23 开发者必备!线上内存泄漏排查的 8 个 Linux 实战工具
- 2025-07-23 内存溢出满分排查步骤,看完不用担心拿不到Offer了
- 2025-07-23 关于JVM调优,看这篇就够了(jvm调优实战简书)
- 2025-07-23 那么大个对象的垃圾回收有什么不同
- 2025-07-23 GC分代年龄为什么是15?(对象gc的分代年龄保存在)
- 2025-07-23 JVM参数调优,一文让你搞懂,再也不为应用操心了!
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)