it-swarm-ko.tech

커널이 시계 한도에 도달 한 경우

나는 현재 inotify watch limit에 도달했기 때문에 루트로 오류를 반환하는 명령이있는 Linux 상자에 문제가 있습니다.

# 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 또는 많은 파일을 모니터링하는 소프트웨어를 사용하는 경우)

내 질문은 다음과 같습니다.

  • 그 가치를 높이는 것이 안전하고 너무 높은 가치의 결과는 무엇입니까?
  • 현재 설정된 시계가 무엇인지, 어떤 프로세스가 결함이있는 소프트웨어로 인해 한계에 도달했는지 여부를 확인할 수있는 프로세스를 찾는 방법이 있습니까?
221
Ultraspider

그 가치를 높이는 것이 안전하고 너무 높은 가치의 결과는 무엇입니까?

예, 그 가치를 높이는 것이 안전하며 가능한 비용은 [ source ]입니다.

  • used 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
    • 아치 : 새 파일을 /etc/sysctl.d/에 넣습니다 (예 : /etc/sysctl.d/40-max-user-watches.conf
  • sysctl -p (Debian/RedHat) 또는 sysctl --system (Arch)로 재부팅하지 않도록 sysctl 설정을 다시로드 할 수 있습니다.

최대 inotify 시계 수에 도달했는지 확인 :

오래된 파일에서 -f (follow) 옵션과 함께 tail를 사용하십시오 (예 : tail -f /var/log/dmesg :-모두 정상이면 마지막 10 줄을 표시하고 일시 정지합니다. Ctrl-C로 중단-시계가 부족합니다 인 경우 어떤 암호 오류 와 함께 실패합니다.

꼬리 : '/ var/log/dmsg'를 볼 수 없음 : 기기에 남은 공간이 없습니다.

무엇을 사용하고 있는지 알아 보려면 inotify 시계

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 fd의 수 (시계 수는 아님)를 나타내고 두 번째 열은 해당 프로세스의 PID를 나타냅니다 [sources : 1 , 2 ].

294
tshepang