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…

有源音箱申请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相关的学习教程可以参考本人的其他博…

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

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

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

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

Postman文件上传接口测试

接口介绍 返回示例 测试步骤 1.添加一个新请求,修改请求名,填写URL,选择请求方式 2.将剩下的media参数放在请求body里,选择form-data,选择key右边的类型为file类型,就会出现选择文件的按钮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案例

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

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

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

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

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

jenkins最佳实践(二):Pipeline流水线部署springCloud微服务项目

各位小伙伴们大家好呀,我是小金,本篇文章我们将介绍如何使用Pipeline流水线部署我们自己的微服务项目,之前没怎么搞过部署相关的,以至于构建流水线的过程中中也遇到了很多自己以前没有考虑过的问题,特写此篇&#xff0…

使用 Python 进行 PDF 文件加密

使用 Python 解密加密的 PDF 文件-CSDN博客定义一个名为的函数,该函数接受三个参数:输入的加密 PDF 文件路径input_pdf、输出的解密 PDF 文件路径output_pdf和密码password。https://blog.csdn.net/qq_45519030/article/details/141256661 在数字化时代…

Linux驱动开发基础(设备树)

所学来自百问网 目录 1. 引入设备树的原因 2. 设备树语法 2.1 Devicetree格式 2.1.1 DTS文件格式 2.1.2 node的格式 2.1.3 properties的格式 2.1.4 dts 文件包含dtsi文件 2.2 常用属性 2.2.1 #address-cells、#size-cells 2.2.2 compatible 2.2.3 model 2.2.4 st…

一步解决Ubuntu中/mnt/hgfs无共享文件夹的问题

当我们启用了共享文件夹后,但是在终端/mnt/hgfs任然没有文件 在终端输入 sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other 之后,就可以查到共享文件了

复现 LET-NET

摘要 稀疏光流法是计算机视觉中的一项基本任务。然而,它依赖于恒定的假设限制了其在高动态范围(HDR)场景中的适用性。在本研究中,我们提出了一种新的方法,旨在通过学习一个对光照变化具有鲁棒性的特征映射来超越图像的…

KubeSphere核心实战_kubesphere部署redis01_为redis指定配置文件_指定存储卷_配置服务---分布式云原生部署架构搭建047

然后我们再来,部署一下redis,可以看到,首先去容器官网去找到对应的redis的镜像然后 可以看到镜像中都有说的,如何启动,以及 --appendonly yes 是指定持久化.然后 /data表示数据存储的位置. 可以看到数据存储位置 然后还有配置文件的位置. 可以看到,我们首先去创建配置文件,然后…