![커널 inotify 감시 제한에 도달했습니다.](https://linux55.com/image/1999/%EC%BB%A4%EB%84%90%20inotify%20%EA%B0%90%EC%8B%9C%20%EC%A0%9C%ED%95%9C%EC%97%90%20%EB%8F%84%EB%8B%AC%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
현재 Linux 상자에서 루트 권한으로 inotify 모니터링 제한에 도달했기 때문에 내 명령이 오류를 반환하는 문제가 발생했습니다.
# tail -f /var/log/messages
[...]
tail: cannot watch '/var/log/messages': No space left on device
# inotifywatch -v /var/log/messages
Establishing watches...
Failed to watch /var/log/messages; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via '/proc/sys/fs/inotify/max_user_watches'.`
나는 그것을 봤고 내가 찾은 모든 해결책은 한도를 늘리는 것이었습니다.
sudo sysctl fs.inotify.max_user_watches=<some random high number>
하지만 이 값을 높인 결과에 대한 정보를 찾을 수 없습니다. 기본 커널 값은 어떤 이유 때문에 설정되어 있는 것 같은데 특정 목적에는 충분하지 않은 것 같습니다. (예를 들어 폴더 수가 많은 Dropbox나 다수의 파일을 모니터링하는 소프트웨어를 사용하는 경우)
내 질문은 다음과 같습니다.
- 이 값을 늘려도 안전합니까? 값이 너무 높으면 어떤 결과가 발생합니까?
- 현재 어떤 시계가 설정되어 있고 어떤 프로세스가 시계를 설정했는지 알아내어 한계에 도달한 것이 소프트웨어 결함으로 인한 것이 아닌지 확인할 수 있는 방법이 있습니까?
답변1
이 값을 늘려도 안전합니까? 값이 너무 높으면 어떤 결과가 발생합니까?
예, 이 값을 높이는 것이 안전합니다. 가능한 비용은 다음과 같습니다. [원천]:
- 각사용된inotify watch는 540바이트(32비트 시스템) 또는 1kB(64비트 시스템에서는 두 배)를 차지합니다. [출처:1,2]
- 이것은에서 비롯됩니다커널 메모리, 이는 상호 교환이 불가능합니다.
- 최대값을 524288로 설정하고 모두 사용한다고 가정하면(가능성은 낮음) 대략 256MB/512MB의 32비트/64비트 커널 메모리를 사용하게 됩니다.
- 또한 애플리케이션은 inotify 핸들, 파일/디렉토리 경로 등을 추적하기 위해 추가 메모리를 사용합니다. 그 양은 디자인에 따라 다릅니다.
최대 Inotify 시계 수를 확인하려면 다음을 수행하세요.
cat /proc/sys/fs/inotify/max_user_watches
Inotify 모니터의 최대 수 설정
일시적으로:
sudo sysctl fs.inotify.max_user_watches=
마지막으로 원하는 값으로 실행하십시오.
영구적인(더 자세한 정보):
fs.inotify.max_user_watches=524288
sysctl 설정 에 들어가세요 . 시스템에 따라 다음 위치 중 하나에 있을 수 있습니다.- 데비안/레드햇:
/etc/sysctl.conf
- Arch: 새 파일을 에 넣습니다
/etc/sysctl.d/
./etc/sysctl.d/40-max-user-watches.conf
- 데비안/레드햇:
- 재부팅을 피하기 위해 sysctl 설정을 다시 로드할 수 있습니다:
sysctl -p
(Debian/RedHat) 또는sysctl --system
(Arch)
최대 Inotify 모니터 수에 도달했는지 확인하십시오.
예를 들어, 이전 파일에 (follow) 옵션을 사용하십시오 tail
. - 모든 것이 잘 진행되면 마지막 10줄이 표시되고 중단하려면 Ctrl-C를 사용하십시오.-f
tail -f /var/log/dmesg
당신의 시계가 사라졌습니다, 그것은 실패할 것이다다소 신비한 오류:
꼬리: '/var/log/dmsg'를 볼 수 없습니다: 장치에 남은 공간이 없습니다
inotify watch 소비량 확인
find /proc/*/fd -lname anon_inode:inotify |
cut -d/ -f3 |
xargs -I '{}' -- ps --no-headers -o '%p %U %c' -p '{}' |
uniq -c |
sort -nr
첫 번째 열은 inotify fds의 수를 나타내며(모니터링된 수는 아님) 두 번째 열은 프로세스의 PID를 표시합니다[출처:1,2].
답변2
다른 주제에서사용 중인 inotify 시계 수를 얻는 방법이 스크립트에 대한 참조가 있습니다.inotify-소비자나는 이것이 관찰자를 지배하고 있는 사람이 누구인지 정확하게 알려줄 것이기 때문에 매우 도움이 된다고 생각합니다.