gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:07:52 24 4
gpt4 key购买 nike

我正在这个相对较大的代码库中工作,我发现文件描述符泄漏,并且进程开始提示在运行某些程序后它们无法打开文件。

虽然这种情况发生在 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 <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
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。

我的问题如下:

  1. “ls/proc//fd”是否会显示链接到具有 pid 的进程的任何库的列表描述符。如果不是,我如何确定我链接的库何时存在泄漏。

  2. 如何确认泄漏是在用户空间还是在内核。

  3. 如果泄漏发生在内核中,我可以使用哪些工具来调试?

  4. 您可以给我的任何其他提示。

感谢您耐心解答问题。

非常感谢任何帮助。

最佳答案

找到问题的解决方案。

某个函数中发生了共享内存附加,并且该函数每 30 秒调用一次。共享内存附加永远不会被分离,因此描述符泄漏。我猜/proc//fd 没有将共享内存附加显示为描述符。因此我的脚本无法捕获文件描述符泄漏。

关于linux-kernel - 调试文件描述符泄漏(在内核中?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10218266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com