首页 > 其他分享 >记一次奇怪的文件句柄泄露问题

记一次奇怪的文件句柄泄露问题

时间:2023-12-03 18:11:35浏览次数:22  
标签:文件 查看 open 句柄 unlimited outItemFile 泄露 奇怪

记录并分享一下最近工作中遇到的 Too many open files 异常的解决过程。

问题背景

产品有个上传压缩包并导入配置信息到数据库中的功能,主要流程如下:

  1. 用户上传压缩包;
  2. 后端解压存放在临时目录,并返回列表给用户;
  3. 用户选择需要导入哪些信息;
  4. 后端按需插入数据库中,完成后删除临时目录。

这个功能上线两三年了,一直没出现问题,最近测试在功能回归时,导入的时候出现Too many open files异常。

但是通过lsof -p pid | wc -l查看当前进程打开的句柄数时,又是正常的。

Too many open files是Linux系统中常见的错误,字面意思就是说打开了太多的文件,超过了系统的限制。

这里的文件(file)更准确的意思是文件句柄,或者是文件描述符。可以说,Linux系统里的一切都是文件,包括网络连接、端口等等。

lsof -p pid命令可以查看指定进程当前打开的文件信息。wc -l命令指按行统计。

问题分析

当时的第一反应是该系统的文件句柄数配置的太低了,因为在其他环境都是正常的。

通过ulimit -a命令,可以查看当前系统对各种资源的限制。

[uyong@linuxtest ~]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31767
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 4096
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31767
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

open files 那行就是表示打开的文件数限制,即一个进程最多可以同时打开的文件数。

也可以通过ulimit -n直接查看最大打开文件数量。

当时查出来的配置是4096,查看其他没问题的环境上的配置,数量都是远远大于这个数。而且系统重新启动后,没做任何操作时,通过lsof -p pid | wc -l查看文件占用,只有100多个。在好的环境上执行导入成功后,再次查看,文件占用数不变。在有问题的环境上导入失败后,查看文件占用数也是不变。

虽然当时的压缩包文件很大,但4096按说也够的。有点奇怪,为了不影响测试进度,只能先临时修改系统配置,增大文件数限制,ulimt -n 65535命令执行后,再次导入没问题了。

命令ulimit -n 65536只能临时临时调整文件数量,系统重启后配置就会失效。

如果要永久生效,需要在配置文件/etc/security/limits.conf里增加如下两行:

* soft nofile 65536
* hard nofile 65535

问题到此就结束了吗,NO

标签:文件,查看,open,句柄,unlimited,outItemFile,泄露,奇怪
From: https://www.cnblogs.com/gonggy/p/17873522.html

相关文章

  • 【pwn】puts or system? --格式化字符串漏洞泄露libc基址
    还是先看一下保护情况开了canary,接着看主函数逻辑看到这里的代码逻辑,我一开始是想通过printf泄露出canary的值,然后再用ret2libc来打,但是我发现这个libc不好泄露,一般的泄露的思路都是构造ROP,通过puts函数泄露出puts的got表内容,但是我在寻找rdi这个gadget的时候,是找不到的这也......
  • 6.5 Windows驱动开发:内核枚举PspCidTable句柄表
    在Windows操作系统内核中,PspCidTable通常是与进程(Process)管理相关的数据结构之一。它与进程的标识和管理有关,每个进程都有一个唯一的标识符,称为进程ID(PID)。与之相关的是客户端ID,它是一个结构,其中包含唯一标识进程的信息。这样的标识符在进程管理、线程管理和内核对象的创建等......
  • 被通报?被下架?用户信息被泄露?APP安全合规风险该如何防范?
    前段时间,一个资讯类APP(以下称“某APP”)的负责人急匆匆找到网安云,直言其负责的APP最近收到很多用户投诉,说他们的信息被泄露了,屡遭电销骚扰。由于电销太过猖狂,导致很多用户都到应用市场给他们发差评,对品牌形象塑造和业务发展影响极大! 同时,他们也收到了本地通信管理局的限期整改......
  • [20231124]奇怪的高逻辑读4.txt
    [20231124]奇怪的高逻辑读4.txt--//很长一段在生产系统看到一条逻辑读很高的sql语句,检查发现谓词使用了DBMS_LOB.SUBSTR函数.--//开发真奇葩,我无论如何也想不出开发为什么这些写代码,当时脑子短路了,使用trunc还好理解一点.--//我开始以为主要原因是lob类型导致fetch记录是1行1......
  • 荷兰宽带数据泄露
    题解题目解压出来是一个conf.bin文件题目提示宽带数据泄露,说明是路由器配置文件这里需要用到RouterPassView工具打开(分析路由器)RouterPassView是一个可以帮助用户查看路由器密码的免费工具。它是由NirSoft公司开发的,旨在帮助用户找回或记录自己所使用的路由器密码......
  • SystemSettingsBroker.exe这个奇怪的进程
    系统版本:22621.2715做完PBRReset之后,进入系统,CheckSystemSettingsBroker.exe并没有存在,点击网络图标(TaskBar)后,SystemSettingsBroker.exe进程被拉起了。然后重启系统。 重启系统之后,放置一段时间,系统进入熄屏状态,通过键盘唤醒系统,进入S0,这时发现SystemSettingsBroker.exe又......
  • P1135 奇怪的电梯
    奇怪的电梯题目背景感谢@yummy提供的一些数据。题目描述呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第\(i\)层楼(\(1\lei\leN\))上有一个数字\(K_i\)(\(0\leK_i\leN\))。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那......
  • 奇怪编译报错!
    #defineLOGE(fmt,...)do{\ char*buf=(char*)malloc(1024);\ if(buf){\ char*file;\ memset(buf,0,1024);\ file=(char*)strrchr(__FILE__,'/');\ if(!file){\ file=(char*)strrchr(__FILE__,'\\');\ }\ ......
  • ctfhub[技能树]--信息泄露
    1.目录遍历概述:网站开启目录遍历后,我们直接看到网站的目录结构,有一些文件是管理员不愿意被普通人访问到的一个一个目录试,最终得到flag2.PHPINFO概述:phpinfo页面常用语测试php是否正常运行,但是这个一个危险的动作,透漏很其中向外多php的配置文件以及系统相关的信息Ctr......
  • 一次 Druid 连接池泄露引发的血案
     最近某个应用程序老是卡,需要重启才能解决问题,导致被各种投诉,排查问题是Druid连接池泄露引发的血案。。异常日志如下:ERROR - com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 50, maxActive 50, creating 0at com.alibaba.......