컨테이너에서 명령을 실행하면 다음과 같은 결과가 나타납니다.
inotify_init1() failed: Too many open files
열려 있는 inotify 감시자 수와 감시자를 계속 열어두는 방법을 어떻게 확인할 수 있나요?
답변1
#!/bin/bash -e
cols=$(stty size | awk '{print $2}')
printf "%-13s%-8s%-6s%-5s%s\n" COUNT PPID PID UID CMD
grep ^inotify /proc/*/fdinfo/* 2>/dev/null |
cut -d/ -f3 | sort | uniq -c | sort -n |
while read -r count pid; do
printf "%-10s" "$count"
ps -o ppid=,pid=,uid=,cmd= -p "$pid"
done |
awk '{sum += $1; print} END {print sum}' |
cut -c-"$cols"
echo
sysctl fs.inotify.max_user_watches
예제 출력:
COUNT PPID PID UID CMD
1 1303 112217 1000 xfce4-terminal --maximize
1 1 1169 100 /lib/systemd/systemd-timesyncd
1 1238 1255 1000 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
1 1187 1292 1000 xfce4-panel
1 1 1614 0 /usr/lib/clightd/clightd
1 1085 1672 1000 /usr/libexec/gvfs-udisks2-volume-monitor
1 1085 1810 1000 /usr/libexec/gvfs-afc-volume-monitor
1 1085 1903 1000 /usr/libexec/evolution-calendar-factory
1 1085 1958 1000 /usr/libexec/evolution-addressbook-factory
1 1 738 0 /usr/sbin/acpid
1 1 760 0 /lib/systemd/systemd-logind
2 1085 1092 1000 /usr/bin/pulseaudio --daemonize=no --log-target=journal
2 1085 1112 1000 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
2 1085 1278 1000 /usr/bin/gpg-agent --supervised
2 1085 1866 1000 /usr/libexec/evolution-source-registry
3 1 1675 0 /usr/lib/udisks2/udisksd
3 1 742 106 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
6 1241 1885 1000 /usr/libexec/gvfsd-trash --spawner :1.8 /org/gtk/gvfs/exec_spaw/0
8 1 17770 1000 /usr/lib/firefox/firefox
10 1292 1303 1000 /usr/lib/x86_64-linux-gnu/xfce4/panel/wrapper-2.0 /usr/lib/x86_64-linux-gnu/xfce4/panel/plugins/libwhiskermenu.so 6 12
12 1 332 0 /lib/systemd/systemd-udevd
14 1 1268 0 /usr/lib/policykit-1/polkitd --no-debug
18 1 1085 1000 /lib/systemd/systemd --user
21 1187 1419 1000 xfdesktop
36 1 1291 1000 xfsettingsd
46 0 1 0 /sbin/init
196
fs.inotify.max_user_watches = 2048
답변2
특정 사용자에 대해 얼마나 많은 inotify_init 파일이 열려 있는지 확인하려면 위의 코드 조각을 사용하십시오(사용자 대체).
find /proc/*/fd -user "<user>" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'
당신은 또한 사용할 수 있습니다inotify-소비자 이것을 구성 파일의 별칭에 추가하면 다음에 현재 사용자가 inotify_init로 연 파일 수를 확인하는 데 사용할 수 있습니다.
inotify-consumers
다음을 설정하여 늘릴 수 있습니다.
echo <new-number> > /proc/sys/fs/inotify/max_user_instances
그러나 이는 영구적이지 않습니다. /etc/sysctl.conf를 사용하여 이를 수행할 수 있습니다.
echo fs.inotify.max_user_watches=<new-number> | sudo tee -a /etc/sysctl.conf && sudo sysctl -p