1. 문제 진단
# dmesg
# grep file-max /var/log/messages
Nov 20 15:09:40 호스트명 kernel: VFS: file-max limit 65536 reached
2. 현재 메모리에 맞게 fs.file-max 조정
new_value=$(free -m | grep Mem | awk '{print $2*100}')
awk -v new_value="$new_value" '
BEGIN {found=0}
/^fs\.file-max/ {print "fs.file-max = " new_value; found=1; next}
{print}
END {if (!found) print "fs.file-max = " new_value}
' /etc/sysctl.conf > /etc/sysctl.conf.tmp && mv -f /etc/sysctl.conf.tmp /etc/sysctl.conf
sysctl -p
3. 프로세스 별 열린 파일 개수 상위 10 확인
lsof | awk '{print $2}' | sort | uniq -c | sort -nr | head -n 10 | while read count pid; do
ps -p $pid -o pid,comm,cmd --no-headers | awk -v c=$count '{print c, $0}';
done
4. 상위 프로세스ID 에 대하여 조사 후, 필요 시, 프로세스 재기동 등 조치
lsof -p 프로세스ID