커널 inotify 감시 제한에 도달했습니다.

커널 inotify 감시 제한에 도달했습니다.

현재 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=524288sysctl 설정 에 들어가세요 . 시스템에 따라 다음 위치 중 하나에 있을 수 있습니다.
    • 데비안/레드햇:/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를 사용하십시오.-ftail -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-소비자나는 이것이 관찰자를 지배하고 있는 사람이 누구인지 정확하게 알려줄 것이기 때문에 매우 도움이 된다고 생각합니다.

관련 정보