파일 설명자 누수가 발생하는 비교적 큰 코드베이스에서 작업 중이며 특정 프로그램을 실행 한 후 프로세스가 파일을 열 수 없다는 불평을 시작합니다. 이 6 일 이후에 발생하지만커널에서의 파일 설명자 누수 디버깅
, 나는 실행 많은 프로세스가 있습니다 9000
에/proc 디렉토리 /에서 sys/FS/파일 최대의 값을 줄여 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
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 & 꼬리 -f pid_monitor.txt
앞서 언급 한 바와 같이, 나는/proc/fd에 어떤 누수가있는 것을 보지 못했지만 누수가 확실히 일어나고 있으며 시스템은 파일 기술자가 부족합니다.
커널에서 누출이 의심됩니다. Linux 커널 버전 2.6.23. 내 질문은
은 다음과 같습니다
윌 'LS/PROC // FD'쇼 목록 설명을 PID와 프로세스에 링크 된 라이브러리. 라이브러리에 누수가있는 경우 어떻게 연결해야 하는지를 어떻게 결정합니까?
커널과 사용자 공간에 누출이 있는지 어떻게 확인합니까?
커널에 누수가 있으면 디버깅 할 때 어떤 도구를 사용할 수 있습니까?
나에게 줄 수있는 다른 팁.
끈기있게 질문 해 주셔서 감사합니다.
정말 도움이됩니다.
1. 네, 링크 된 도서관을 포함한 모든 기술자를 보여줍니다. 2. 커널에서 fd가 유출되는 것은 거의 없습니다. 3. 2를보십시오. 4. 문제가 무엇인지 명확하지 않습니다. 더 자세한 정보를 제공 할 수 있습니까? 어떤 시스템 콜이 실패하고 어떤 에러가 있습니까? – strkol