android FD_SET_chk问题定位

android FD_SET_chk问题定位

  • 一、FD报错
  • 二、问题定位
    • 2.1 APM定位
    • 2.2 adb定位
    • 2.3. 代码获取FD数
  • 三、FD优化

一、FD报错

App在运行中记录报错如下,FD_SET,这个问题大概是文件描述符(File Descriptor,简称FD)超过了最大限制数,说明App内可能存在FD泄漏。
在这里插入图片描述

二、问题定位

2.1 APM定位

由于App使用了火山APM监测,找到此对应崩溃信息中的Native信息,可以看到FD归类,已超过1024个(每个手机的可打开的最大FD不同)。而大部分集中在data中,data里存在大量创建文件没有关闭造成FD超过1024.
在这里插入图片描述

2.2 adb定位

// 1.先查询到App包名对应的pid
adb shell ps
// 2.cat /proc/pid/limits 查看最大可开启的文件数,找到open files (FD)、lock files (文件锁)// 3. adb shell ls -l /proc/pid/fd,需要root权限
adb shell ls -l /proc/988/fd

2.3. 代码获取FD数

  • 使用StrictMode框架定位具体代码占用fd,搜索日志TAG StrictMode 定位出问题的代码
 StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build())StrictMode.setVmPolicy(StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build())
  • 直接代码获取fd数
private fun printFdInfo() {val pid = android.os.Process.myPid()val fdDir = File("/proc/$pid/fd")if (fdDir.isDirectory) {val files = fdDir.listFiles()if (files != null) {Log.d("FD_INFO", "进程 " + pid + " 当前打开的文件描述符数量: " + files.size)for (file in files) {try {val filePath = file.canonicalPathLog.d("FD_INFO", "文件描述符: " + file.name + " -> " + filePath)} catch (e: IOException) {Log.e("FD_INFO", "获取文件描述符信息失败", e)}}}} else {Log.e("FD_INFO", "无法访问 /proc/$pid/fd 目录")}}

三、FD优化

  • 数据库不要过多,数据库设计要精简合理,App退出时及时关闭
  • 文件操作完毕后,要及时close
  • 避免大量创建文件,使用缓存的文件进行操作
  • Socket请求、Http请求尽量避免轮询

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL InnoDB引擎四大特性ACID实现方案分析

文章目录 概要InnoDb引擎ACID模型的实现方案小结 概要 对于Mysql,事物的支撑并不依赖于Server层,不同的存储引擎对于事物的支持也不一样,对于我们常用的InnoDB引擎,其提供了一套基于【ACID模型】的事物完整的解决方案。为什么MyIS…

云计算实训32——安装nginx(修改端口为8080)、roles基本用法、使用剧本安装nginx、使用roles实现lnmp

一、安装nginx并更改其端口 编辑hosts配置文件 [rootmo ~]# vim /etc/ansible/hosts 创建目录 [rootmo ~]# mkdir /etc/ansible/playbook 编辑配置文件 [rootmo ~]# vim /etc/ansible/playbook/nginx.yml 执行测试 [rootmo ~]# ansible-playbook /etc/ansible/playbook/n…

华为od(D卷)二叉树计算

文章目录 题目描述输入描述输出描述示例1思路代码 题目描述 给出一个二叉树如下图所示: 6/ \7 9\ / -2 6 请由该二叉树生成一个新的二叉树,它满足其树中的每个节点将包含原始树中的左子树和右子树的和。 20 (7-296)/ \-2 6\ / 0 0 左子树…

有源音箱申请Hi-Res认证指南

有源音箱(也称为主动式音箱)是一种内置功率放大器的音箱,其显著特点是音箱内部含有一套功率放大电路,可以直接通过音频线(如RCA线、3.5mm音频线或莲花线)与信号源(如电视、电脑、DVD播放器等&am…

详细扒一扒css的背景渐变(通俗易懂)

前言: CSS 渐变使您可以显示两种或多种指定颜色之间的平滑过渡。 CSS 定义了两种渐变类型: 线性渐变(向下/向上/向左/向右/对角线)径向渐变(由其中心定义) 下面来详细看看吧~ 🌈🌈文…

【知识分享】ubuntu22.04-ESP32环境搭建

文章目录 一、概要二、环境及工具介绍三、名词解释四、环境搭建 一、概要 手上有一块安信可的WIFI开发板,用的是乐鑫的ESP32模组。刚好最新装了双系统,貌似在Linux环境使用gcc编译器会快一些。     万事开头难,要在Linux环境下进行开发工…

[数据集][目标检测]瞳孔虹膜检测数据集VOC+YOLO格式8768张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8768 标注数量(xml文件个数):8768 标注数量(txt文件个数):8768 标注…

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(二)---ROS2与UE5进行图像数据传输

前言 本系列教程旨在使用UE5配置一个具备激光雷达深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博…

thinkphp8 定时任务 addOption

在ThinkPHP8中&#xff0c;我们可以使用addOption方法来添加命令行选项。这个方法允许我们为命令行应用程序定义可接受的选项和参数。 以下是一个简单的例子&#xff0c;演示如何在ThinkPHP8中为命令行应用程序添加一个选项&#xff1a; <?php namespace app\command;use…

【git 第一篇章】版本控制之GIT

Git是一种分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。以下是Git的详细介绍&#xff1a; 一、Git的基本概念 分布式&#xff1a;Git的最大特点之一是它的分布式设计。这意味着每个开发者都拥有完整的代码仓库&#xff0c;包含项目的全部历史记录。…

【MySQL进阶之路】表的约束——主键,自增长,唯一键,外键

目录 主键 复合主键 自增长 唯一键 unique 外键 方案一 方案二 方案三 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 主键 主键&#xff1a;primary key用来唯一的约束该字段里面的数据&#xff0c;不能重复&#xff0c;不能为空&#xff08;必须有非空约束&#xf…

js高阶 -- 总结 03(小白)

严格模式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> &…

微知-lspci如何查看pcie设备树状结构(-t)

对于查看pcie设备列表除了看是否存在 还需要看拓扑结构。如何看&#xff1f; lspci -t以减号为分割说明 第一列数字是域段 和 bus id。比如0000:00中0000是域 00是busid 第二列 01.2中01是device id。2是functionid 如果还有下游设备device还有一个指定busid的序号

传统的进程间通信——管道通信

传统的进程间通信——管道通信 管道是UNIX系统中最古老的进程间通信方式&#xff0c;是一种特殊文件读写机制 当进程从管道文件中读取数据时&#xff0c;如果管道中没有数据则进程会进入阻塞状态&#xff0c;直到有数据读取出来才返回&#xff0c;因此不需要借助信号、文件锁来…

Postman文件上传接口测试

接口介绍 返回示例 测试步骤 1.添加一个新请求&#xff0c;修改请求名&#xff0c;填写URL&#xff0c;选择请求方式 2.将剩下的media参数放在请求body里&#xff0c;选择form-data&#xff0c;选择key右边的类型为file类型&#xff0c;就会出现选择文件的按钮Select Files&a…

QT翻金币小游戏(含音频图片文件资源)

目录 QT翻金币小游戏 音频图片资源文件获取 效果展示 图片 视频 实现代码 main.cpp mymainwindow.h mymainwindow.cpp startscene.h startscene.cpp selectscene.cpp playscene.h playscene.cpp mypushbutton.h mypushbutton.cpp dataconfig.h dataconfig.cpp QT…

大模型时代,云南白药如何成为一家AI医药企业?|产业AI案例

作者|斗斗 编辑|皮爷 出品|产业家 中医药大模型发布&#xff1b;英伟达成立AI制药部门&#xff0c;发力生物制药领域&#xff1b;赛诺菲与百图生科达成战略合作&#xff0c;共同开发用于生物治疗药物发现的领先模型&#xff1b;京东发布医疗大模型&#xff1b;百度“产业级”…

读软件开发安全之道:概念、设计与实施04缓解

1. 缓解 1.1. 安全思维转换为有效行动的方法就是首先预判威胁&#xff0c;然后针对可能的漏洞加以保护 1.2. 主动响应的做法就叫做“缓解” 1.2.1. mitigation 1.2.2. 喂宝宝的时候给孩子围上围嘴&#xff0c;避免掉下来的食物粘在宝宝的衣服上&#xff0c;还有安全带、限速…

ansync/await 运行流程图

1、流程图&#xff1a; 2、await 之后的方法是何时执行&#xff0c;如何执行的&#xff1f; await 的方法在 Task 执行完成之后&#xff0c;通过调用 Finish 方法执行的。 具体的执行步骤是先将 MoveNext 方法注册到 Task 的回调里&#xff0c;然后在 Task 执行完后调用这个方法…

ID3算法详解:构建决策树的利器

目录 引言 ID3算法概述 算法基础 信息熵 ​编辑 信息增益 ID3算法步骤 决策树 概念: 核心&#xff1a; 节点 1. 根节点 2. 非叶子节点 3. 叶子节点 引言 在机器学习领域&#xff0c;决策树是一种非常流行的分类和回归方法。其中&#xff0c;ID3算法作为决策树算法…