小编use*_*468的帖子

调试文件描述符泄漏(在内核中?)

我正在相对较大的代码库中工作,在该代码库中我看到文件描述符泄漏,并且进程开始抱怨在运行某些程序后它们无法打开文件。

尽管这是在6天后发生的,但我可以通过将/ proc / sys / fs / file-max中的值减小为9000来在3-4小时内重现该问题。

随时都有许多进程在运行。我已经能够找出可能导致泄漏的几个过程。但是,我看不到任何文件描述符通过lsof或/ proc // fd泄漏。

如果我杀死了我怀疑泄漏的进程(它们彼此通信),则泄漏消失了。FD被释放。

在while(1)循环中的cat / proc / sys / fs / file-nr显示泄漏。但是,我在任何过程中都看不到任何泄漏。

这是我写来检测泄漏发生的脚本:

#!/bin/bash

if [ "$#" != "2" ];then
    name=`basename $0`
    echo "Usage : $name <threshold for number of pids> <check_interval>"
    exit 1
fi


fd_threshold=$1
check_interval=$2
total_num_desc=0
touch pid_monitor.txt
nowdate=`date`
echo "=================================================================================================================================" >> pid_monitor.txt
echo "****************************************MONITORING STARTS AT $nowdate***************************************************" >> pid_monitor.txt

while [ 1 ]
do
    for x in `ps -ef | awk '{ print $2 }'`
    do …
Run Code Online (Sandbox Code Playgroud)

kernel memory-leaks lsof file-descriptor linux-kernel

5
推荐指数
1
解决办法
6188
查看次数