사용 중인 inotify 시계 수를 얻는 방법

사용 중인 inotify 시계 수를 얻는 방법

파일을 배치하는 데 사용하는 이벤트 트리거입니다 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 ucountsinclude/linux/user_namespace.h;하지만 이러한 카운터를 사용자 공간에 노출하는 인터페이스를 찾을 수 없습니다.

관련 정보