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值达到最大值为啥能够引发这样的问题,待继续探究。

  • 相关阅读:
    今日头条 算法 架构
    什么才是真正的成长
    罗素 哲学 数学
    商业模式 广告 DSP
    人工智能 商业 落地 榜单
    【转】没有过时的CRM 图解大全
    20个人的初创公司,采用哪些技术栈和软件便于快速研发?
    【转】DevSecOps:打造安全合规的 DevOps 平台
    spring security HttpSessionEventPublisher & spring session HttpSessionListener
    JEECG codegenerate-3.6.3 maven
  • 原文地址:https://www.cnblogs.com/hgrical/p/10315407.html
Copyright © 2011-2022 走看看