linux文件描述符泄漏,linux-kernel – 调试文件描述符泄漏(在内核中?)

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

虽然这发生在6天之后,但我可以通过将/ proc / sys / fs / file-max中的值减少到9000来在3-4小时内重现该问题.

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

如果我杀死我怀疑泄漏的进程(他们彼此沟通),泄漏就会消失. FD被释放.

cat / proc / sys / fs / file-nr在while(1)循环中显示泄漏.但是,我没有发现任何过程中有任何泄漏.

这是我写的一个脚本,用于检测泄漏是否发生:

#!/bin/bash

if [ "$#" != "2" ];then

name=`basename $0`

echo "Usage : $name "

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

if [ "$x" != "PID" ];then

num_fd=`ls -l /proc/$x/fd 2>/dev/null | wc -l`

pname=`cat /proc/$x/cmdline 2> /dev/null`

total_num_desc=`expr $total_num_desc + $num_fd`

if [ $num_fd -gt $fd_threshold ]; then

echo "Proces name $pname($x) and number of open descriptor = $num_fd" >> pid_monitor.txt

fi

fi

done

total_nr_desc=`cat /proc/sys/fs/file-nr`

lsof_desc=`lsof | wc -l`

nowdate=`date`

echo "$nowdate : Total number of open file descriptor = $total_num_desc lsof desc: = $lsof_desc file-nr descriptor = $total_nr_desc" >> pid_monitor.txt

total_num_desc=0

sleep $2

done

./monitor.fd.sh 500 2&

tail -f pid_monitor.txt

正如我之前提到的,我没有在/ proc // fd中看到任何泄漏,但是肯定会发生泄漏并且系统正在耗尽文件描述符.

我怀疑内核中的某些东西正在泄漏. Linux内核版本2.6.23.

我的问题如下:

>将’ls / proc // fd’显示链接到具有pid的进程的任何库的列表描述符.如果不是,我如何确定我链接到的库中何时发生泄漏.

>如何确认泄漏是在用户空间和内核中.

>如果漏洞在内核中,我可以使用哪些工具进行调试?

>你可以给我任何其他提示.

感谢您耐心地回答这个问题.

非常感谢任何帮助.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值