fsnotify文件监控中的资源占用

警惕资源耗尽

1. inotify资源占用

inotify是Linux下一种异步文件系统事件监控机制,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。在系统中通过以下三个文件配置了系统inotify资源参数:

 

1

$ ll /proc/sys/fs/inotify

2

-rw-r--r-- 1 root root 0 Jul 2 00:16 max_queued_events

3

-rw-r--r-- 1 root root 0 Jul 1 23:16 max_user_instances

4

-rw-r--r-- 1 root root 0 Jul 2 00:13 max_user_watches
  • max_queued_evnets 表示调用inotify_init时分配给inotify instance中可排队的event最大值,超出该值的event将被丢弃并触发IN_Q_OVERFLOW事件。
  • max_user_instances 表示每一个real user ID可创建的inotify instatnces的数量上限。
  • max_user_watches 表示每个inotify instance可监控的最大文件数量,如果监控的文件数目巨大,需要适当增加此值。
    查看系统种该参数默认值:
 

1

$ sysctl -a | grep inotify

2

fs.inotify.max_queued_events = 16384

3

fs.inotify.max_user_instances = 1024

4

fs.inotify.max_user_watches = 8192

在每次fsnotify.NewWatcher()创建监控实例都会申请一个inotify资源,并在watch.Close()关闭监控实例时释放inotify资源,即参数max_user_instances定义的资源。若对监控实例资源占用超过该参数,程序会返回如下error信息:

 

1

$ go run fsnotify.go

2

2021/07/03 22:30:09 too many open files

3

exit status 1

为了防止程序未及时释放inotify资源导致资源耗尽,切记要对fsnotify.NewWatcher()创建的监控实例执行Close()释放inotify资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值