안녕하세요. 따시입니다.
프로세스의 File Descriptor 개수 확인하는 shell script를 공유하려고 합니다.
FD(File Descriptor ) 는 파이프, FIFO, 소켓, 터미널, 디바이스, 일반파일 등 종류에 상관없이 모든 열려있는 파일을 참조할때 씁니다.
운영체제에서 FD 자원을 무한정 쓸수는 없습니다. (file descriptor 는 65535까지 최대로 사용이 가능)
만약 어플리케이션에서 소켓 통신 또는 파일 I/O 등을 사용할때에 FD 를 사용 후 반환을 안한다면
어플리케이션을 죽게 됩니다.
과거 개발할때에 파일로그를 직접 쓰는 기능이 있었는데 Close를 안하고 적용한적이 있었습니다.
로그를 쓸때에 파일을 Open하면서 FD를 사용했지만 Close를 안해서 FD를 반환을 안한것..
결국 FD는 끝없이 올라 갔고, 어플리케이션을 장애가 나고 말았습니다.
요즘은 웹어플리케이션 모니터링을 해주는 APM 가 잘 만들어져 있긴합니다.
그러나... 개발중이나.. 급하기 디버깅을 하여 운영체제에서 수치 확인이 필요할 때에 도움이 되었으면 합니다.
#!/bin/sh
init_var ()
{
REFRESH_TIME=5
RUN_START=`tput setaf 2`
RUN_END=`tput sgr0`
REVC=`tput smso`
NORC=`tput rmso`
PROCESSES="tomcat-api
"
}
init_scr ()
{
echo "${REVC}"
echo "_________________________________________________"
echo " PROCESS MONITOR START "
echo "_________________________________________________"
echo "${NORC}"
}
end_scr ()
{
echo "${REVC}"
echo "_________________________________________________"
echo " PROCESS MONITOR... "
echo "_________________________________________________"
echo "${NORC}"
}
intr_rtn ()
{
echo ""
echo "${REVC}"
echo "_________________________________________________"
echo " PROCESS MONITOR END "
echo "_________________________________________________"
echo "${NORC}"
exit 1
}
#---------------------------------------
init_var
trap intr_rtn 2 > /dev/null 2> /dev/null # Interrupt Key
trap intr_rtn 3 > /dev/null 2> /dev/null # Quit Key
while true; do
clear
init_scr
for PROCESS in ${PROCESSES}; do
PID=`ps -ef | grep ${PROCESS} | grep -v grep | grep -v "tail -f" | grep -v "vi " | grep -v "tcpdump" | awk '{print $2}'`
if [ "${PID}" != "" ]; then
echo "$PROCESS[$PID] FD = `ls -al /proc/${PID}/fd | wc -l`"
else
echo "$PROCESS[$PID] FD = 0"
fi
done
end_scr
sleep ${REFRESH_TIME};
done
리눅스에서 위 shell script를 작성하여 실행하면 아래와 같이 출력이 됩니다.
tomcat-api 값은 shell script 에 작성한 프로세스 명이고
[3383]은 pid 값입니다.
87은 현재 사용하고 있는 FD Count 값입니다.
5초간격으로 새로고침이 되며, FD 값이 유지되는지.. 끝없이 올라가는지.. 확인을 하 실수 있습니다.
'개발경험 및 메모 > Linux' 카테고리의 다른 글
로그파일 내용 삭제 cat /dev/null (0) | 2020.07.29 |
---|---|
SCP 파일다운로드(SSH 파일다운로드) (0) | 2020.07.06 |
ERROR : max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] (0) | 2020.02.24 |
[Linux] CentOS 버전확인 (0) | 2020.02.14 |
최근댓글