阿里三面:你有没有解决过线上的OOM异常?你是如何定位线上项目OOM问题的?

作者: 徐庶说技术分类: 计算机技术 发布时间: 2024-03-04 15:48:18 浏览:6495 次

阿里三面:你有没有解决过线上的OOM异常?你是如何定位线上项目OOM问题的?

徐庶说技术:
视频配套笔记:https://t.bilibili.com/795484241902174212

iceecream:
oom有几个进程参数,调整进程的oom评分,如果没有内存泄露,或者异常进程占用,除了加内存也没啥好解决方法。

AI视频小助理:
一、线上OM异常的定位和解决方法,包括对象申请过多、内存资源耗尽未释放和堆内存不足等问题,并提供了解决方案。 00:01 - 面试中经常被问到解决线上OOM异常问题 01:18 - OM异常可能由应用一次性申请的对象太多、内存资源耗尽未释放、堆内存不足等原因造成 03:23 - 可以通过更改申请对象数量、及时释放资源、调整堆内存等方式解决OOM异常问题 二、如何通过gm命令查看java应用的堆内存分配情况,并结合应用指标进行调整。同时,还介绍了如何通过堆的dump文件定位om溢出的具体代码位置。 03:34 - 通过GMAP命令查看应用堆分配情况 05:27 - 定位线上OOM问题,需要设置堆的dump文件参数 06:55 - 线上系统复杂,根据异常很难定位问题,需要其他技术手段 三、使用gcov来定位内存溢出的方法,需要保证系统硬盘空间足够大,并演示了如何使用gcov导出堆的dump文件并进行定位。 07:08 - 建议设置参数,但需保证硬盘空间足够 08:19 - 设置参数可导出堆的dump文件,用于定位OOM问题 09:49 - 使用visual vm工具载入dump文件,定位最占内存的实例 四、通过DMP文件和g vs vm工具定位Om问题的方法,以及在系统未挂掉时如何导出DP文件进行调试。建议在运行时加入gm参数以获取更好的定位效果。 10:44 - 可以通过DMP文件和g vs vm定位OOM问题 12:18 - 在运行时加上gm参数可以快速定位问题 12:41 - 可以通过阿尔萨斯调试工具进行故障排除 五、如何使用GVISVM和命令行工具GDB来快速定位内存问题,建议在程序运行时使用命令导出dump文件,以便进行调优。 14:16 - 使用GPS定位Java进程,使用gmap工具查找内存占用最大的对象 16:17 - 使用gmap命令导出dump文件,结合GVISVM进行调优,定位业务代码和GC root 17:32 - 使用GVISVM查看线程状态,快速定位业务代码和对应的GC root --本内容由AI视频小助理生成,关注解锁AI助理,由@bili_26759357996 召唤发送

waiteing:
但实际生产中不是先重启吗?重启后怎么查原因?看代码日志吗?

【回复】先摘流一台,然后dump对内存快照,下载到本机,然后用mat或者heaphero分析就好了,大概率是代码的问题,qps太高导致的情况比较少
【回复】回复 @善良小茅 :有道理,get到了
【回复】其他机器快速重启,止血,+限流流给研发时间去查,然后走hotfix快速修复发布
今天过得满意吗:
OOM理论上在以下内存区都会出现: 1.堆heap: 报错的时候会显示OOM,以及java heap space,长出现在大批量查询或者是出现内存泄漏; 2.栈stack: 理论存在,实际上OOM之前,会先报栈深异常(StackOverflowError),出现就是有死循环代码了; 3.方法区:极少出现,报错会显示OOM,以及PermGen space; 4.直接内存:较少出现,报错显示OOM,但是不会显示哪里出现OOM(根据排除法就知道了),一般出在网络框架中,例如netty。 内存泄漏一般都和IO,线程池,缓存有关;

晨隐_:
我们是在jvm参数中设置一个监听oom的事件,去调用sh脚本通过一个cron命令自重启(避免直接重启变成挂掉的线程的子线程而直接中止),并且发射请求调用接口发送通知和dump文件到邮箱里面[吃瓜]

科技猎手 程序员 科技 OOM问题排查 OOM问题解决 OOM问题定位 面试 计算机技术 java OOM异常

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读