파일을 배치하는 데 사용하는 이벤트 트리거입니다 inotifywait
.
여러 파일을 모니터링할 때 inotifywait
, max_user_watches
초과 시 아래와 같은 오류가 발생합니다.
inotify 모니터링으로 인해 종료되었습니다. #012 /proc/sys/fs/inotify/max_user_watches 추가를 고려해보세요
튜닝이 필요한데 /proc/sys/fs/inotify/max_user_watches
현재 파일의 Watch 번호를 확인할 수 있나요?
다음과 같은 것을 확인하는 방법이 있습니까?파일 번호파일 설명자에서?
답변1
나는 그것을 하나로 묶었다이 작은 스크립트@mosvy의 답변을 바탕으로 합니다. 원래 고안된 이후 상당히 많은 개선(안정성, 전체성, 이전 시스템의 속도)이 이루어졌습니다. 대부분의 경우정상실행하는 데 100밀리초 미만이 소요됩니다.
INOTIFY
WATCH
COUNT PID USER COMMAND
--------------------------------------
3044 3933 myuser node /usr/local/bin/tsserver
2965 3941 myuser /usr/local/bin/node /home/myuser/.config/coc/extensions/node_modules/coc-tsserver/bin/tsserverForkStart /hom
979 3954 myuser /usr/local/bin/node /home/myuser/.config/coc/extensions/node_modules/coc-tsserver/node_modules/typescript/li
1 3899 myuser /usr/local/bin/node --no-warnings /home/myuser/dev/dotfiles/common-setup/vim/dotvim/plugged/coc.nvim/build/i
6989 WATCHES TOTAL COUNT
2023 업데이트: 기본 버전 사용
Michael Sartain은 이 기능을 기본(C++) 바이너리(inotify-정보), 따라서 빌드 단계를 진행하는 데 몇 초만 투자할 수 있다면 그의 프로젝트는 모든 면에서 더 낫기 때문에 본질적으로 내 스크립트를 중복하게 만듭니다. 어마 어마하게 빠른!
답변2
좀 더 현명한 방법으로 대답하고 싶지만 inotify(7)
사용자가 설정한 시계를 계산하기 위해 제가 찾은 유일한 방법은 다음과 같습니다.
find /proc/*/fd -user "$USER" -lname anon_inode:inotify \
-printf '%hinfo/%f\n' 2>/dev/null |
xargs cat | grep -c '^inotify'
현재 사용자에 "$USER"
대해 알고 싶은 실제 사용자를 변경하십시오 . "`id -u`"
이는 max_user_watches
프로세스별 또는 Inotify 인스턴스/파일 설명자별이 아닌 사용자별 제한입니다.
이는 먼저 find
생성된 모든 파일 설명자를 연 inotify_init*(2)
다음 해당 파일을 찾아 /proc/PID/fdinfo/FD
각 설명자에 추가된 감시 설명자에 대한 정보를 얻습니다 inotify_add_watch(2)
(참조).proc(5)
/proc/[pid]/fdinfo/
특정 항목을 inotify하는 방법에 대한 지침). 옵션은 패턴과 일치하는 모든 줄의 수를 인쇄하도록 합니다 -c
.grep
노트:카운터는 사용자 네임스페이스 구조의 참조 inotify_watches
에 있는 다른 사용자별 카운터처럼 유지됩니다 .struct ucounts
include/linux/user_namespace.h
;하지만 이러한 카운터를 사용자 공간에 노출하는 인터페이스를 찾을 수 없습니다.