首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Probe:Android线上OOM问题定位组件

体现App稳定性的一个重要数据就是Crash率,而在众多Crash中最棘手最难定位的就是OOM问题。本文主要分享美团的Probe组件是如何对线上OOM问题进行快速定位的。...于是我们构建了用于快速定位线上OOM问题组件——Probe,下图是Probe组件架构,本文主要分享Probe组件是如何对线上OOM问题进行快速定位的。 ?...问题定位 在分析清楚OOM问题的原因之后,我们对于线上OOM问题就可以做到对症下药。...而针对OOM问题,我们可以根据堆栈信息的特征来确定这是哪一个类型的OOM,下面分别介绍使用Probe组件是如何去定位线上发生的每一种类型的OOM问题的。...骑手Android端使用Probe组件解决了很多线上OOM问题,将线上OOM Crash率从最高峰的2‰降低到了现在的0.02‰左右。

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

线上问题定位--OOM

服务器上部署了Java服务,出现了OutOfMemoryError,问题应该如何定位?...解决思路 Java服务OOM,最常见的原因为: 有可能是内存分配确实过小,而正常业务使用了大量内存 某一个对象被频繁申请,却没有释放,内存不断泄漏,导致内存耗尽 某一个资源被频繁申请,系统资源耗尽,例如...一、查发生了OOM的进程 工具:top 方法: 执行top -d 1 -c,每秒刷新一次,显示进程运行信息列表 键入M (大写m),进程按照内存使用排序 图示: 二、确认是不是内存本身就分配过小 方法:...四、确认是否是资源耗尽 查看进程创建的线程数,如果资源耗尽,也可能出现OOM。 工具: ps 方法:ps -efL 2820 查看进程网络连接数,如果资源耗尽,也可能出现OOM。...例如,某一台线上服务器的sshd进程PID是2820,查看 ll /proc/2820/fd ll /proc/2820/task

1.1K31

线上OOM 了 ,教你快速定位问题~

问题 ---- 今天介绍如何使用 JVM 堆转储的工具 MAT 来分析 OOM 问题。...使用 MAT 分析 OOM 问题 对于排查 OOM 问题、分析程序堆内存使用情况,最好的方式就是分析堆转储。 堆转储,包含了堆现场全貌和线程栈信息(Java 6 Update 14 开始包含)。...使用 jstat 等工具虽然可以观察堆内存使用情况的变化,但是对程序内到底有多少对象、哪些是大对象还一无所知,也就是说只能看到问题但无法定位问题。...,来定位内存泄露的具体点; 配合查看对象属性的功能,可以脱离源码看到对象的各种属性的值和依赖关系,帮助我们理清程序逻辑和参数; 辅助使用查看线程栈来看 OOM 问题是否和过多线程有关,甚至可以在线程栈看到...那么,OOM 的时候,FooService 是在执行什么逻辑呢? 为解决这个问题,我们可以点击工具栏的第五个按钮(下图红色框所示)。

93630

记一次 android 线上 oom 问题

问题分析 随着回滚版本的放量,主端 oom 崩溃逐渐回归正常,进一步坐实了新版本存在问题oom 问题非常不好排查,原因是崩溃时的堆栈与引入 bug 的地方已经相差了十万八千里,不能直接定位问题点。...问题定位 修复版都打好准备送测了,老大的一句话提醒了我——最好能在本地复现一下。...为何 oom 问题会集中在 0.0.0.1 版本中?...幸好有这次问题的复盘,不然这个问题要继续存在多久还是个未知数~ 最后总结一下 oom 问题的处理方法: 首先不要心慌,特别是在不经求证的情况下靠猜测来定位问题、靠不断发小版本在线上验证问题,这样做一来不严谨...,二来效率比较低,最终很可能还会定位不到问题; 最好的办法是通过现场日志来定位出错的场景,可以极大的缩小排查范围; oom 与 oof 在 Java 崩溃堆栈中有相似的表现,因此遇到这类问题可以多考虑下句柄泄漏的可能性

1.1K40

线上服务内存OOM问题定位三板斧

相信大家都有感触,线上服务内存OOM问题,是最难定位问题,不过归根结底,最常见的原因: 本身资源不够 申请的太多 资源耗尽 58到家架构部,运维部,58速运技术部联合进行了一次线上服务内存OOM问题排查实战演练...,将内存OOM问题定位三板斧分享出来,希望对大家也有帮助。...题目 某服务器上部署了Java服务一枚,出现了OutOfMemoryError,请问有可能是什么原因,问题应该如何定位?...不妨设服务进程PID为10765(没错,就是CPU占用高的那个倒霉的进程《线上服务CPU100%问题快速定位实战》)。...例如,某一台线上服务器的sshd进程PID是9339,查看 ll /proc/9339/fd ll /proc/9339/task ?

1.9K60

JVM-GC3--定位线上OOM问题的方法

那就是线上发生OOM, 如何定位 1. top命令, 线上查看cpu和内存的使用情况 2. jstack 进程号   查看当前进程有哪些线程   初步定为排查线程的健康状况, 如果有很多线程处于等待状态...,那么可能就有问题了 3. jstat -gc 线程号: GC回收的情况 4. jinfo 3271    显示进程中的常用信息 5. jmap   jmap -dump:format=b, file=...问题: 拷贝到文件内容怎么看呢? 使用java自带的jvisualvm.java . 这个文件在jdk1.8/bin/目录下.   1). 在windows下双击打开jvisualvm....: 滚动生成日志也存在一定的问题, 有可能你要查看的日志已经被删除了....看看哪些类实例最多, 这样内存和cpu居高不下. ---- 扩展阅读 整理这个文件的时候, 想起之前同事整理的一篇在spring cloud环境下,如何通过spring boot actuator来定位线上问题

1.2K30

并发编程系列:线上问题定位

系列文章: 并发编程系列:关于线程中断 并发编程系列:阻塞队列的实现原理 一 背景 大家都知道,在服务/应用发布到预览或者线上环境时,经常会出现一些测试中没有出现的问题。...并且由于环境所限,我们也不可能在线上调试代码,所以只能通过日志、系统信息和dump等手段来在线上定位问题。...根据经验,系统上发生的主要问题是在cpu、内存、磁盘几个方面,因此会优先针对这类问题进行定位。由于绝大部分服务都是部署在Linux环境下,所以一下以Linux命令为例进行说明。...、内存回收等问题的可能。...有时可能存在CPU利用率达到100%,如果出现这种情况,那么很有可能是代码中写了死循环,继续看代码定位问题原因。

53720

spring batch线上问题定位纪实

前言碎语 最近线上spring batch的一个问题围绕博主近两周时间,甚是扰神。具体现象为,spring batch执行中莫名其妙线程就卡住了,不往下走了。...然后修改了dayEndjob的触发执行改为异步,发现问题依旧。...2.定位JpaPagingItemReader的问题 盯着BATCH_STEP_EXECUTION看了很久,发现其他的step_execution都是启动中的状态,其中两个step_execution...然后在apollo把日志级别调整成DEBUG级别(动态调整线上日志级别),发现输出大量的如下日志信息 java.lang.IllegalStateException: Transaction already...一般如果查询没问题,不会有如上情况,这个bug也是隐藏的深,死循环后info日志级别下没有任何输出,就和线程阻塞似的。解决这个问题后感觉神清气爽啊

23020

【PHP问题定位线上机器打日志混乱问题定位分析

"每个小问题,都值得深入!!" 现象 在线上脚本机器写入单条日志过长时会出现交叉打印的现象: ?...php_stream_write_buffer ->php_stdiop_write(多次调用,每次最多写入8192字节) ->write(),是在 多次调用php_stdiop_write 函数时出的问题...截断的位置非常接近8192的倍数值;但因为定位时间不是当时的时间点,期间数据库存在部分改动,所以出现偏移,那么也能验证我们之前的猜想,正是file_put_contents 多次调用write函数的时候出现交叉打印...问题解决: 1、修改打日志处代码,这么巨大的日志写入文件是否合理?...strLogMsg, FILE_APPEND); write函数在O_APPEND模式下,偏移到文件末尾与写文件是原子性的,不存在被覆盖的情况; 4、以O_APPEND方式打开文件,然后使用lseek,定位到文件首部

87530

我是怎么定位线上问题的?

面试官:「你是怎么定位线上问题的?」 这个面试题我在两年社招的时候遇到过,前几天面试也遇到了。我觉得我每一次都答得中规中矩,今天来梳理复盘下,下次又被问到的时候希望可以答得更好。...下一次我应该会按照这个思路去答: 1、如果线上出现了问题,我们更多的是希望由监控告警发现我们出了线上问题,而不是等到业务侧反馈。所以,我们需要对核心接口做好监控告警的功能。...4、因为线上大多数的问题都来源于系统的变更,可能我们只是变更了很少的代码,但只要有一丝的逻辑没留意到,就真的很可能会导致出现问题,回滚很可能是最快能恢复线上正常运行的办法。...5、如果近期都没发布过系统,是系统告的警,那追踪下告警和报错日志,应该是可以很快地就能定位问题。...11、要是不能复现,只能在怀疑的地方打上详细的日志再好好观察(问题定位不出来,很多时候就是日志不够详细,而日志在正常情况下也不应该打太多) 这个我估摸想要考察的是看看你平时是怎么去定位问题的,定位问题的思路是什么

59720

可视化分析定位线上 JVM 问题

前提是线上 JVM 配置了以下参数: [题外话:JDK 版本 1.6,现在大部分互联网企业应用系统应该是 1.8 以上了吧 ] # 在控制台输出GC情况 -verbose:gc # GC日志输出 -XX...GC 日志可视化 首先获取到线上 GC 的日志文件后,通过在线日志分析工具(GCeasy)上传文件分析,网址:https://gceasy.io/ ?...3)Interactive Graphs(GC 前后堆区大小变化视图) 为了更好的了解 GC 垃圾回收对应的区域,可以参考这篇文章【从 Java 代码如何运行聊到 JVM 和对象的创建-分配-定位-布局...按对象的大小排序,依次展开第一个最大的对象中所引用的对象,发现里面有一个集合,该集合里存有 1836555 个对象,导致 OOM 内存溢出,如下图所示: ? ?...小结 通过三步法定位线上环境 JVM 问题,如频繁 Full GC 、内存泄漏或发生 OOM 现象,即将 GC 日志、Dump 文件及 APM 监控系统结合在一起观察分析,寻找出问题产生的根本原因,然后才能对症下药

2.8K31

如何快速定位线上 CPU 高负载问题

引言线上 CPU 高负载是许多运维工程师和开发人员经常面临的挑战之一。当 CPU 使用率升高时,系统性能可能会受到严重影响,因此快速定位问题所在至关重要。...本文将介绍一些常见的技术和方法,帮助你迅速找到线上 CPU 高负载问题的根本原因,并提供实际代码示例。1. 监控工具的使用1.1....结论线上 CPU 高负载问题可能会给系统性能和用户体验带来严重影响。通过使用监控工具、分析 CPU 使用率升高的原因、查看线程和堆栈信息、分析代码、优化和测试,你可以迅速找到问题所在并解决它。...高效地处理高 CPU 使用率问题是每位运维工程师和开发人员的必备技能之一。希望本文的方法和示例代码能够帮助你更好地应对线上 CPU 高负载问题。...如果你有任何问题或建议,请在下面的评论区留言,让我们一起探讨和交流。如果你觉得这篇文章对你有帮助,请点赞和分享,让更多的人学习如何快速定位和解决线上 CPU 高负载问题。谢谢阅读!

41320

不改一行代码定位线上性能问题

背景 最近时运不佳,几乎天天被线上问题骚扰。前几天刚解决了一个 HashSet 的并发问题,周六又来了一个性能问题。...尝试解决 由于这种也不是业务问题,不能直接定位。所以尝试在测试环境复现,但遗憾的测试环境贼快。 没办法只能硬着头皮上了。...结果果然打脸了; Nginx 里的日志也表明确实响应时间确实有问题。 为了清晰的了解这个问题,我简单梳理了这个调用过程。 整个的流程算是比较常见的分层架构: 客户端请求到 Nginx。...日志大法 我们首先想到的是打日志,在可能会慢的方法或接口处记录处理时间来判断哪里有问题。 但通过刚才的调用链来说,这个请求流程不短。加日志涉及的改动较多而且万一加漏了还有可能定位不到问题。...总结 回到之前的问题线上通过这个工具分析我们得到了如下结果。 有些方法确实执行时快时慢,但都是和数据库相关的。由于目前数据库压力较大,准备在接下来进行冷热数据分离,以及分库分表。

18140

不改一行代码定位线上性能问题

背景 最近时运不佳,几乎天天被线上问题骚扰。前几天刚解决了一个 HashSet 的并发问题,周六又来了一个性能问题。...由于这种也不是业务问题,不能直接定位。所以尝试在测试环境复现,但遗憾的测试环境贼快。 没办法只能硬着头皮上了。...结果果然打脸了;Nginx 里的日志也表明确实响应时间确实有问题。 为了清晰的了解这个问题,我简单梳理了这个调用过程。 ? 整个的流程算是比较常见的分层架构: 客户端请求到 Nginx。...日志大法 我们首先想到的是打日志,在可能会慢的方法或接口处记录处理时间来判断哪里有问题。 但通过刚才的调用链来说,这个请求流程不短。加日志涉及的改动较多而且万一加漏了还有可能定位不到问题。...总结 回到之前的问题线上通过这个工具分析我们得到了如下结果。 有些方法确实执行时快时慢,但都是和数据库相关的。由于目前数据库压力较大,准备在接下来进行冷热数据分离,以及分库分表。

38430

Arthas - Java 线上问题定位处理的终极利器

前言 在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof...最终焦头烂额,还不一定能查出问题所在。而现在,大多数的常见问题你都可以使用 Arthas 轻松定位,迅速解决,及时止损,准时下班。...支持 JDK6+, 采用命令行交互模式,提供 Tab 自动不全,可以方便的定位和诊断线上程序运行问题。截至本篇文章编写时,已经收获 Star 17000+。...遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 有什么办法可以监控到 JVM 的实时运行状态?...4.3 线程池线程状态 定位线程问题之前,先回顾一下线程的几种常见状态: RUNNABLE 运行中 TIMED_WAITIN 调用了以下方法的线程会进入TIMED_WAITING: Thread#sleep

16.3K65
领券