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

  • 相关阅读:
    QT visual stuido 集成插件不能打开ui文件的解决方法(去掉xml的UTF8标记)
    就异地协作办公来说, 360的体验完爆他们——360书生企业云盘 来了
    MVC 4
    Mvc的多层架构
    代码生成器
    js理解
    我(webabcd)的文章索引
    多个视图结果显示于一个共用预览视图内
    .NET源码
    Using Ninject in a Web Application
  • 原文地址:https://www.cnblogs.com/hgrical/p/10315407.html
Copyright © 2011-2022 走看看