某Java服务(假设PID=10765)出现了OOM,如何快速定位?
Java服务出现OOM,最常见的原因是:(1)内存确实分配过小,内存确实不够用;(2)某一个对象被频繁申请,却没有释放,内存不断泄漏,导致内存耗尽;(3)某一个资源被频繁申请,系统资源耗尽,例如:不断创建线程,不断发起网络连接;
更具体的,可以按照以下步骤,使用以下工具排查。
三、确认是否是资源耗尽工具:(1)pstree(2)netstat查看进程创建的线程数,以及网络连接数,如果资源耗尽,也可能出现OOM。 这里介绍另一种方法,通过(1)/proc/${PID}/fd(2)/proc/${PID}/task可以分别查看句柄详情和线程数。 例如,某一台线上服务器的sshd进程PID是9339,执行:ll /proc/9339/fdll /proc/9339/task如上图,sshd共占用了四个句柄(1)0 -> 标准输入;(2)1 -> 标准输出;(3)2 -> 标准错误输出;(4)3 -> socket(容易想到是监听端口); sshd只有一个主线程PID为9339,并没有多线程。
就能知道进程打开的句柄数和线程数。
事件:Java资深开发技术栈,技术人职业发展
人物:前阿里P8资深架构师,肖秋平时间:6.30(今天)20:00
分享提纲是什么?(1)如何高效学习新技术;(2)技术人如何做好职业规划;(3)技术人如何提升思维与修养;(4)Java资深开发技术栈;
有技术资料么(以下所有课程,免费)?(1)MySQL索引机制深度剖析;(2)Mybatis源码解析;(3)JVM体系结构;奈学教育在线课程,免费送!
听说有Java资深工程师的知识地图?
画外音:xmind太大,无法一一展开,可扫码领取,建议收藏。
如何参加免费直播,领取免费课程资料?
扫码获取直播地址,免费领资料
阅读原文,免费直播+免费资料等你。