火山引擎MARS-APM Plus x 飞书 |降低线上OOM,提高App性能稳定性

通过使用火山引擎MARS-APM Plus的memory graph功能,飞书研发团队有效分析定位问题线上case多达30例,线上OOM率降低到了0.8‰,降幅达到60%。大幅提升了用户体验,为飞书的性能品质保驾护航。

应用程序稳定性是影响用户体验及留存的关键因素

对于移动App的开发者来说,最基础也是最关注的问题就是应用程序的稳定性。而崩溃问题是影响稳定性的重要因素, 包括NSException、Signal、卡死、OOM(Out Of Memory)等问题类型。其中,OOM问题是随着业务的迭代,慢慢进入了开发者视野。

OOM问题往往潜伏在复杂的业务背景下,复现困难且缺少有效的问题排查手段。目前在 iOS 端排查内存问题的工具主要包括 Xcode 提供的 Memory Graph 和 Instruments 相关的工具集,它们能够提供相对完备的内存信息,但是应用场景仅限于开发环境,无法在生产环境使用。由于内存问题往往发生在一些极端的使用场景,线下开发测试一般无法覆盖对应的问题,Xcode 提供的工具无法分析处理大多数偶现的疑难问题。

飞书是字节跳动旗下先进企业协作与管理平台,不仅包含一站式整合及时沟通、智能日历、音视频会议、飞书文档、云盘等办公协作套件,更提供飞书OKR、飞书招聘、飞书绩效等组织管理产品。作为一款企业协作与管理平台,业务复杂度非常高,稍有不注意就会触发OOM,导致程序崩溃。

那么飞书的业务有多复杂呢?举例来说:

  • 飞书消息列表页的消息类型多达十余种,包括文档预览,视频、复杂的富文本等;
  • 飞书会议在千人视频中可以对视频做各种特效渲染,视频过程能共享文档,千人在线编辑文档;
  • 飞书文档本身支持插入各种类型信息,比如复杂计算公式、脑图、UML图、同时也支持外部扩展;

飞书把内存的使用运用到了极限,稍不留意就会导致OOM。试想一下,千人视频会议的时候,突然间因为内存问题导致崩溃,会议方是什么感受?给客户发送一条复杂的消息,因为内存问题,客户的手机崩溃了,客户是什

<think>好的,我现在需要帮用户分析他提供的两个命令,解释它们的用途和可能的结果。首先,用户执行的是`sudo dmesg -T | grep -iE 'error|panic|oom|deadlock' | grep "02:[3-5]"`,然后第二个命令只是`root@dftech:~#`,可能是一个输入错误或者未完成的命令。我需要先集中处理第一个命令。 首先,分解命令的每个部分。`sudo dmesg -T`:这里`dmesg`用于显示内核环形缓冲区中的消息,`-T`选项会让时间戳以可读的格式显示。接下来,通过管道`|`将输出传递给`grep -iE 'error|panic|oom|deadlock'`,这里`-i`是忽略大小写,`-E`启用扩展正则表达式,匹配包含error、panic、oom或deadlock的行。然后再用管道传给`grep "02:[3-5]"`,筛选时间在02:03到02:59之间的日志条目。 用户可能是在排查系统问题,比如系统崩溃、内存不足或死锁等问题,特别是在凌晨2点到3点之间的日志。需要解释每个命令部分的作用,以及组合起来的效果。此外,可能需要说明如果没有输出代表什么,如果有输出该怎么解读。 接下来要考虑用户的知识水平。可能用户对Linux命令有一定了解,但需要更详细的解释。所以需要分步骤解释每个命令和选项的意义,以及整个命令组合的作用。同时,可能需要提醒用户注意权限问题,因为使用了sudo,可能需要管理员权限才能访问所有日志。 第二个命令`root@dftech:~#`看起来像是一个提示符,用户可能误输入或者没有完成命令。需要指出这一点,避免用户困惑。 另外,需要检查是否有常见的错误,比如时间格式是否正确,grep的正则表达式是否准确。例如,`02:[3-5]`会匹配02:3x到02:5x的时间,但实际小时后面的分钟是00-59,所以这里可能用户想匹配02:03到02:59之间的时间,但表达式中的`[3-5]`只能匹配单个字符,即3、4、5,所以实际匹配的是02:3x、02:4x、02:5x,其中x可以是任何数字。例如,02:30、02:49等。但如果是凌晨2点到3点的话,应该是02:00到02:59,所以用户可能想用更精确的正则表达式,比如`02:[0-5][0-9]`,但当前写法会匹配包含02:3、02:4、02:5的行,比如02:3后面的任意字符,所以可能包括02:30到02:59的时间。需要指出这一点,说明当前命令可能覆盖的时间范围。 另外,需要提醒用户,如果系统时间被修改过,或者日志的时间戳有其他时区问题,可能会有偏差。此外,如果日志中没有相关关键词,可能不会有输出,说明系统在指定时间没有严重错误。 总结回答的结构应该是先解释命令的每个部分,再说明整个命令的作用,可能的输出结果及含义,以及使用时的注意事项。需要确保用中文清晰表达,步骤分明,帮助用户理解如何排查问题。</think>让我们逐步分析您执行的命令及其作用: 1. **命令分解**: ```bash sudo dmesg -T | grep -iE 'error|panic|oom|deadlock' | grep "02:[3-5]" ``` 2. **各组成部分解析**: - `sudo dmesg -T` 以可读时间格式(`-T`)显示内核日志,需管理员权限(`sudo`)。 - `grep -iE 'error|panic|oom|deadlock'` 筛选包含 **错误/内核恐慌/内存不足/死锁** 的关键词(`-i` 忽略大小写,`-E` 支持正则)。 - `grep "02:[3-5]"` 进一步过滤时间戳在 **02:30 至 02:59** 之间的记录(匹配 `02:3x`, `02:4x`, `02:5x`)。 3. **典型应用场景**: 此命令用于排查系统在 **凌晨2:30至2:59** 期间可能发生的严重问题,例如: - 硬件错误(如磁盘/USB故障) - 内存耗尽(OOM Killer触发) - 内核级崩溃(panic) - 进程死锁 4. **结果解读**: - **无输出**:目标时间段内无重大系统问题。 - **有输出**:需结合具体日志分析。例如: ```log [Tue Jun 1 02:45:12 2023] Out of memory: Kill process 1234 (java) score 789 ``` 表示系统在 02:45 因内存不足终止了 Java 进程。 5. **注意事项**: - 时间匹配逻辑:`02:[3-5]` 实际覆盖 **02:30–02:59**(非02:03–02:59),因正则仅匹配单个字符位置。 - 时区影响:确保系统时间与日志时区一致。 - 权限问题:部分日志可能需要 `sudo` 才能完整访问。 6. **未完成命令提示**: 您输入的第二个命令 `root@dftech:~#` 仅有终端提示符,无实际操作,可能是误输入。 如需进一步分析实际输出内容,可提供具体日志片段。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值