在 Debian 系统上,inotify 相关的内容通常可以从以下几个方面查看和排查:
inotify 受内核参数限制,常用如下:
cat /proc/sys/fs/inotify/max_user_watches
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_queued_events
说明:
max_user_watches:单个用户可监视的文件/目录总数max_user_instances:单个用户可创建的 inotify 实例数max_queued_events:事件队列长度sudo sysctl fs.inotify.max_user_watches=524288
编辑:
sudo nano /etc/sysctl.conf
添加:
fs.inotify.max_user_watches=524288
生效:
sudo sysctl -p
ls -l /proc/*/fd | grep inotify
或:
find /proc/*/fd -type l -name 'inotify*' 2>/dev/null
cat /proc/<PID>/status | grep Inotify
示例:
cat /proc/1234/status | grep Inotify
输出示例:
Inotify watches: 1024
Inotify instances: 2
inotifywait(推荐)安装:
sudo apt install inotify-tools
监听目录:
inotifywait -m /path/to/dir
常用参数:
inotifywait -mrq /var/log
-m 持续监听-r 递归-q 安静模式Too many open files
ENOSPC: System limit for number of file watchers reached
解决方法:
max_user_watchesfor pid in $(ls /proc | grep '^[0-9]'); do
n=$(ls /proc/$pid/fd 2>/dev/null | wc -l)
echo "$pid: $n"
done | sort -k2 -n
如果你是想:
可以告诉我你的具体场景,我可以给你更针对性的命令。