zoukankan      html  css  js  c++  java
  • 进程使用的文件描述符fd值达到最大值引起的问题

    1、问题描述

    近日,在测试一个设备的SDK网关,当时我在测试断网情况下,sdk采集的数据是否能正常将数据保存到本地sqlite数据库,开始的时候程序一切正常按照预期的将采集数据存储到本地,如果断网时间不长又将网络连接上,那么sdk能正常的重连主网关也业务网关将存储在本地sqlite数据库的数据上传到云端,当断网时间达到1小时20分钟左右,sdk正常采集数据,但数据却无法被存储到本地sqlite数据库,如果此时将网络恢复正常,程序尝试调用系统函数getaddrinfo通过主网关域名获取域名对应的ip将会一直返回失败,实在不解啊。

    2、原因阐述

    由于系统进程能打开的文件描述的的最大值为默认为1024(可通过命令查看特定进程当前打开的最大描述符值: watch "ls /proc/`pidof entryMain`/fd | wc -l"),当前进程使用的文件描述符最大值已达到1024,那么后续所有的包括系统函数open,socket等调用都将返回失败,因为当前并没有可用的文件描述符,但是进程的文件描述符达到最大值为啥会能够引发上述问题,我到现在还不知其中的缘由,这应该是内核层的东西,本人不太熟悉内核,待研究。

    3、修复问题

    当时还不知是因为系统文件描述使用完了才导致问题1的发生,但是我能够确认是sdk程序出现了fd不关闭泄漏问题,然后就顺着这个问题将问题修复了,然后再进行测试,果然过了一个多小时,甚至好几个小时后,进程当前打开的描述符的值保持不变,问题1也同时得到了修复,但是fd值达到最大值为啥能够引发这样的问题,待继续探究。

  • 相关阅读:
    svg使用
    人生是 立体, 不是平面, 股票大作手不太好的结局
    react 管理平台
    首页性能优化
    vue 安装插件
    python中如何对list之间求交集,并集和差集
    Java中String直接复制和new String创建对象的区别以及equals和==的区别和效率对比
    关于二叉树的总结
    Postgresql 数据库,如何进行数据备份以及导入到另外的数据库
    Java List详解,面试中应该如何解答关于List的问题
  • 原文地址:https://www.cnblogs.com/hgrical/p/10315407.html
Copyright © 2011-2022 走看看