FD(File Descriptor)泄漏

news2024/12/27 13:16:47

File Descriptor是Linux下概念,fd 是 int类型非负数!

进程打开File,Socket,Pipe后生成一个File Descriptor,它是打开这个系统资源的标识符。

Linux每个进程fd最大1024个,超过之后进程 crash,crash堆栈如下:

  •  使用匿名共享内存

E AndroidRuntime: java.lang.Error: java.io.IOException: SharedMemory_create failed: EMFILE (Too many open files)

F DEBUG : Abort message: 'FORTIFY: FD_SET: file descriptor 1462 >= FD_SETSIZE 1024'

  • 使用fd = open(filename, O_RDONLY) 打开文件

返回fd变量场景如下:

  1. epoll初始化:fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC) / fd = epoll_create1(EPOLL_CLOEXEC)
  2. 打开文件:fd = open(filename, O_RDONLY)
  3. 共享内存:fd = getParcelFileDescriptor(new MemoryFile(

还有更多隐蔽的生成了fd,如:new Socket,new Thread,new PipedOutputStream‘

如何监控fd泄漏?

  • StrictMode
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads()
    .detectDiskWrites()
    .detectNetwork() // or .detectAll() for all detectable problems
    .penaltyLog()
    .build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    .detectLeakedSqlLiteObjects()
    .detectLeakedClosableObjects()
    .penaltyLog()
    .penaltyDeath()
    .build());
  • 脚本定时读取fd:本地写shell/python脚本定时读取proc/pid/fd
  • shell命令读取fd总量或fd列表
 lsof -n -p pid  | wc -l 

fd标识符和泄漏文件类型关系

类型fd标识符
网络请求Socket
HandlerThreadanon_inode:[eventpoll]和anon_inode:[eventfd]成对出现
in/output打开文件

/data/data/x,/data/app/x,/storage/emulate/0/x

例如 File(cacheDir, "file").createNewFile()

打开数据库文件/dev/ashmem
InputChannel泄露时增加明显anon_inode:[dmabuf]
线程

FD泄漏优化:

  • HandlerThread用完后要关闭(HandlerThread::quitSafely()/HandlerThread::quit())
  • 减少window数量:每增加1个window上涨10个fd
  • 停止无用的线程:1个线程增加1个fd

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

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

相关文章

英语单词拼读小程序开发制作介绍

英语单词拼读小程序开发制作介绍本英语单词拼读小程序系统开发的主要功能有: 1、按年级分类展示每个年级阶段的英语单词信息。 2、点击选择的单词进入单词拼读页面,展示英语单词的拼读音标、中文意思、单词发音、拆分词汇发音、用户通过朗读发音对比。通…

TCP客户端模拟链接websocket服务端发送消息(二)

兄弟们,我来填坑了,o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o,前几天写了个tcp模拟websocket客户端的以为完成,后面需要发送消息给服务端,以为简单不就是一个发送消息么,这不是一…

Docker 镜像加速访问方案

在数字化时代,Docker以其轻量级和便捷性成为开发者和运维人员的首选容器技术。然而自2023年5月中旬起,Docker Hub 的访问速度较慢或不稳定,这对依赖Docker Hub拉取镜像的用户来说无疑是一个挑战。本文将提供 Docker Hub 访问的一系列替代方案…

牛客网刷题 ——C语言初阶——BC112小乐乐求和

1.牛客网刷题 ——C语言初阶 牛客网:BC112小乐乐求和 小乐乐最近接触了求和符号Σ,他想计算的结果。但是小乐乐很笨,请你帮助他解答。 输入描述: 输入一个正整数n (1 ≤ n ≤ 109) 输出描述: 输出一个值,为求和结果。 示例1 输…

Eclipse常用快捷键详解

文章目录 Eclipse常用快捷键详解一、引言二、编辑快捷键三、选择和移动快捷键四、行操作快捷键五、搜索和导航快捷键六、调试快捷键七、重构快捷键八、其他快捷键九、使用案例场景一:代码编写代码示例 场景二:代码调试场景三:代码重构代码示例…

clickhouse测试报告

​一、背景 针对当前实施的项目,面临着两个主要挑战:一是需要存储更详细的原始数据和中间数据,二是现有基于MySQL的数据存储解决方案在数据量增长时性能受限,特别是在进行跨年历史数据的即时分析时。为了解决这些问题&#xf…

windows和mac共享文件夹访问教程

mac共享文件夹,windows访问: mac上开启文件夹共享,并添加文件夹和用户,然后windows 上 在windows上快捷键 win r 打开运行,按如下格式输入mac设备的IP地址: 就可以访问了: windows共享文件夹…

FPGA自学之路:到底有多崎岖?

FPGA,即现场可编程门阵列,被誉为硬件世界的“瑞士军刀”,其灵活性和可编程性让无数开发者为之倾倒。但谈及FPGA的学习难度,不少人望而却步。那么,FPGA自学之路到底有多崎岖呢? 几座大山那么高?…

两分钟掌握 TDengine 全部写入方式

1. 背景 TDengine 写入过程会涉及很多概念,这些概念目前你是不是还一团乱,参数绑定写入、无模式写入、websocket 写入、RESTFUL 写入 、各种连接器写入等等一堆的写入,都是做什么的,不明白,这里花两分钟时间给你彻底整…

GJB289A总线典型网络理论分析

1.GJB289A总线典型网络理论分析 根据相关标准,“某个支路的故障不影响整个系统”及耦合变压器特性,本文在仿真与实测时均采用典型的一发一收两端口总线网络。 典型两端口总线网络电气结构如图1所示,包含终端匹配电阻、故障隔离电阻、耦合变…

BLE core 内容整理解释

本文内容比较杂散,只是做记录使用,后续会整理的有条理些 link layer 基本介绍 **Link Layer Control(链路层控制)**是蓝牙低功耗(BLE)协议栈的核心部分,负责实现设备间可靠、安全、低功耗的数…

DP动态规划+贪心题目汇总

文章目录 背包01背包416. 分割等和子集 完全背包279. 完全平方数322. 零钱兑换 两个字符串DPLCR 095. 最长公共子序列139. 单词拆分 单个数组字符串DP5. 最长回文子串300. 最长递增子序列53.最大子数组和152. 乘积最大子数组198. 打家劫舍 三角形120. 三角形最小路径和 贪心121…

传统网络架构与SDN架构对比

传统网络采用分布式控制,每台设备独立控制且管理耗时耗力,扩展困难,按 OSI 模型分层,成本高、业务部署慢、安全性欠佳且开放性不足。而 SDN 架构将控制平面集中到控制器,数据转发由交换机负责,可统一管理提…

CI/CD是什么?

CI/CD 定义 CI/CD 代表持续集成和持续部署(或持续交付)。它是一套实践和工具,旨在通过自动化构建、测试和部署来改进软件开发流程,使您能够更快、更可靠地交付代码更改。 持续集成 (CI):在共享存储库中自动构建、测试…

Vue中动态样式绑定+CSS变量实现切换明暗主题功能——从入门到进阶

1.直接借助Vue的动态绑定样式绑定 Vue动态样式绑定 在Vue中,动态样式绑定是一种强大的功能,它允许开发者根据数据的变化动态地更新元素的样式。以下是对Vue动态样式绑定的详细知识梳理与详解: 一、基础知识 Vue的动态样式绑定主要通过v-b…

科汛网校KesionEDU CheckOrder SQL注入漏洞复现

0x01 产品简介 科汛网校KesionEDU是KESION科汛开发的在线教育建站系统,支持在线直播教学、课程点播、录播授课等多种教学方式,满足不同场景下的教学需求。提供问答互动、学习点评、在线笔记等功能,增强学员与教师之间的互动交流。拥有在线考试系统,支持单选、多选、问答等…

Windows Subsystem for Linux——设置默认登录用户名

大纲 问题解法 问题 在《Windows Subsystem for Linux——安装多个相同的操作系统》一文中,我们实现了子系统的导出和导入,但是也带来了一个问题:登录到系统时,会使用root用户。在一些场景下,这并不符合我们的使用场景…

【编译原理】往年题汇总(山东大学软件学院用)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀编译原理_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

智慧农业物联网传感器:开启农业新时代

在当今科技飞速发展的时代,农业领域正经历着一场前所未有的变革,而智慧农业物联网传感器无疑是这场变革中的关键利器。它宛如农业的 “智慧大脑”,悄然渗透到农业生产的各个环节,为传统农业注入了全新的活力,让农业生产…

观察者模式和发布-订阅模式有什么异同?它们在哪些情况下会被使用?

大家好,我是锋哥。今天分享关于【观察者模式和发布-订阅模式有什么异同?它们在哪些情况下会被使用?】面试题。希望对大家有帮助; 观察者模式和发布-订阅模式有什么异同?它们在哪些情况下会被使用? 1000道 …