tail : inotify를 사용할 수없고 폴링으로 되돌아 감 : 열린 파일이 너무 많습니다


16

시도 tail -f catalina.out하면 오류가 발생합니다.

tail: inotify cannot be used, reverting to polling: Too many open files 

나는이 게시물에서 답을 시도했다 : 너무 많은 열린 파일-범인을 찾는 방법

lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head

위의 명령을 실행했을 때 출력은

17 6115

13 6413

10 6417

10 6415

9 6418

9 6416

9 6414

8 6419

4 9 

4 8

1024 개의 파일이 열려있는 프로세스가 없습니다. 열린 파일 수가 17,13,10,10,9가 아닌가? 아니면 내가 잘못 이해하고 있습니까? 그리고 이것들은 모두 bash, sshd, apache2, 바람둥이는 4 번이었습니다.

나는 또한 lsof | grep tail | wc -l 어느 것을 반환했다 20. 이 숫자는 크지 않으므로 왜 tail -f catalina.out실패합니까?

답변:


17

이것은 http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html 의 지침에 따라 해결되었습니다 .

영구 솔루션 (다시 시작해도 유지됨) 라인 추가 :

fs.inotify.max_user_watches=1048576

에:

/etc/sysctl.conf

(재시동 할 때에도) 한계 값을 영구적으로 수정했습니다.

그런 다음

sysctl -p

1
파일 디스크립터를 늘리면 도움이되지 않습니다. 내 tail메시지는 약간 다릅니다 tail: inotify resources exhausted. 이 답변이 도움이되었습니다. sudo sysctl -w fs.inotify.max_user_watches=1048576 && sysctl -p영구적으로 수정하지 않고 도움이되는지 테스트하는 데 사용할 수도 있습니다 . 이 게시물은 또한 nefaria.com/2014/08/tail-inotify-resources-hausted
Ruslan Stelmachenko 님의

9

나는 대답 이 완전하지 않다고 생각합니다 (시스템에서 열린 파일의 최대 제한에 대해서는 아무 말도하지 않습니다).

열린 파일의 최대 수에는 두 가지 제한이 있습니다.

  1. 프로세스 당 열린 파일의 최대 한계 .

    • 다음을 사용하여이 한계의 값을 확인할 수 있습니다. ulimit -n
    • 다음을 사용하여이 제한을 변경할 수 있습니다. ulimit -n new_limit_number
    • 다음은 많은 파일을 열어 놓은 상위 10 개 프로세스를 가져 오는 명령입니다.

      lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
  2. 시스템 당 열린 파일의 최대 한계 .

    • 다음을 사용하여이 한계의 값을 확인할 수 있습니다. cat /proc/sys/fs/file-max
    • 다음을 사용하여이 제한을 변경할 수 있습니다. echo new_limit_number > /proc/sys/fs/file-max
    • 열려있는 모든 파일 핸들을 계산하십시오. lsof | wc -l

6

아마도 inotify시계가 부족했을 것입니다 . 아마도 백그라운드에서 파일 동기화 도구 (예 : Dropbox)를 실행하고 있습니까?

Linux에서 tail -f명령 의 내부 구현은 inotify기본적으로 메커니즘을 사용하여 파일 변경을 모니터합니다. 모든 inotify시계가 부족한 경우 (기본적으로 8192) inotify -f해당 파일의 변경 사항을 감지하려면 폴링으로 전환해야합니다.

물론 최대 inotify시계 수를 수정할 수 있습니다 .

참조 :
http://www.quora.com/How-is-tail-f-implemented
http://peter-butkovic.blogspot.com/2013/08/tail-inotify-resources-exhausted.html
https : // serverfault.com/questions/510708/tail-inotify- 사용할 수 없음 폴링-폴링-너무 많은 열린 파일


3

sysctl fs.inotify.max_user_instances에 대한 사용자 당 한도를 얻습니다 inotify.

나는 그것을 경험했고 시스템 전체의 모든 한계 시스템은 충분히 높았지만 사용자가 설정하는 것은 기본적으로 상대적으로 낮 sysctl.conf습니다 sysctl -p.


3

운영

ps aux | grep tail

crontab의 스폰과 같이 너무 많은 tail 명령이 실행 중인지 확인합니다.


하이 실제로 작동, 너무 많은 파일을 미행
Alexander Mills

데이터를 어떻게 번역합니까? 각 정보가 무엇을 의미하고 어떻게해야하는지 설명 할 수 있습니까? 예 :root 20161 0.0 0.0 11132 1044 pts/0 S+ 17:27 0:00 grep tail
Christia

너무 많은 프로세스가 일치하고 일치하는 행에 "grep"이 포함 된 경우에만 명령 자체가 생성됩니다. 대신 "pgrep tail"명령을 사용하십시오.
tangxinfa

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.