본문 바로가기
IT/Linux

리눅스에서 limit of inotify watches was reached 문제 해결 방법

by ITeaStory 2023. 7. 20.

inotify는 Linux 시스템에서 파일 시스템 이벤트를 모니터링하는 데 사용되는 기능으로 파일이나 디렉토리의 변경 사항을 쉽게 추적할 수 있도록 돕는 기능입니다. 하지만, 이 inotify 감시(watch)의 수에는 한계가 있습니다. 따라서 많은 파일이나 디렉토리를 모니터링해야 할 때 "tailf: cannot add inotify watch (limit of inotify watches was reached)"와 같은 오류 메시지가 나타날 수 있습니다. 이 메시지는 tailf를 사용했을 때 나타나는 메시지입니다.

tailf: cannot add inotify watch (limit of inotify watches was reached)

또는 tail -f를 사용했을 때는 아래와 같은 에러가 나타나기도 합니다.
tail: inotify resources exhausted 
tail: inotify cannot be used, reverting to polling

inotify resources exhausted

이런 문제가 발생했을 때 해결하는 방법을 알려드리겠습니다.

inotify 감시 제한 확인 방법

리눅스 시스템의 현재 inotify 감시 제한이 얼마로 설정되어 있는지 확인해봐야 합니다. inotify 감시 제한의 값은 아래의 명령어로 확인할 수 있습니다.

cat /proc/sys/fs/inotify/max_user_watches

이 명령어를 실행하면 현재 리눅스 시스템에서 설정되어 있는 inotify 감시 제한의 수를 확인할 수 있습니다. 기본적으로 8192가 설정되어 있을 것입니다.

inotify 감시 제한 변경 방법

이 제한으로 인해 파일이나 디렉토리의 모니터링을 수행하지 못할 경우 이 제한을 높여줄 필요가 있습니다. 아래의 명령어를 사용하면 쉽게 이 제한을 높여줄 수 있습니다.

echo 16384 | sudo tee /proc/sys/fs/inotify/max_user_watches

 

이 명령어는 inotify 감시 제한을 기존의 8192의 두 배인 16384만큼 늘리도록 설정합니다. 이 명령으로 설정한 값은 서버가 재부팅되면 다시 기본값인 8192로 돌아갑니다.

만약 이 값을 재부팅해도 사라지지 않게 설정하려면 /etc/sysctl.conf에 내용을 추가하면 됩니다. 추가하는 명령어는 아래와 같습니다.

echo fs.inotify.max_user_watches=16384 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

이렇게 하면 inotify 감시 제한을 기존의 8192에서 16384로 늘릴 수 있습니다.

주의사항

이 방법은 간단하게 inotify 감시 제한을 높여 아래의 에러들을 해결하는 방법입니다.

tailf: cannot add inotify watch (limit of inotify watches was reached)

tail: inotify resources exhausted 
tail: inotify cannot be used, reverting to polling

하지만 이렇게 inotify 감시 제한을 높이면 시스템 커널의 메모리를 소모하므로 주의가 필요합니다. 무작정 늘릴 수는 없으니 적정하게 조절할 필요가 있습니다. 이 값은 커널 메모리를 사용하며 스왑이 불가능합니다. 또 하나당 64bit 시스템에서는 1kb를 사용하며 만약 524,288로 설정하면 모두 사용되었을 경우 512MB의 메모리를 사용하게 됩니다.

그러므로 이 방법을 사용할 때는 메모리 사용량에 대해 충분히 고려한 후 수정이 필요합니다. 개별 프로세스가 너무 많은 감시를 사용하고 있으면 사용 중인 감시의 수를 줄이는 것이 더 좋은 해결 방법이 될 수 있습니다.