操作系统环境:
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 6.4(Santiago)
Release: 6.4
Codename: Santiago
问题表现:
第一个问题:
在此机器上部署了多个同样的应用程序。此应用程序使用java7提供的WatchService功能。同事在日志中发现下列日志内容:
30 六月 2014 16:26:48,881 ERRORWorker-2 AdvancedWatchService:register - User limit of inotify watchesreached java.io.IOException: User limit ofinotify watches reached at sun.nio.fs.LinuxWatchService$Poller.implRegister(LinuxWatchService.java:261) at sun.nio.fs.AbstractPoller.processRequests(AbstractPoller.java:260) at sun.nio.fs.LinuxWatchService$Poller.run(LinuxWatchService.java:326) at java.lang.Thread.run(Thread.java:722)
同事分析找到的原因为:cat/proc/sys/fs/inotify/max_user_watches参数值限制引发的问题。需要增加此参数值。
第二个问题:
另在同一台机器同一个用户执行tail –f <文件名>实时查看某日志文件时,出现了下列错误提示:
tail:无法监视"01000211.log":设备上没有空间
我通过命令“strace -fTittt tail -f 01000302.log >$HOME/strace2.log 2>&1” 重现跟踪问题。
在日志中找到下列重要信息:
1404867279.958627 [ 37eaae8fa7] inotify_add_watch(4,"01000302.log", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = -1ENOSPC (No space left on device) <0.000042>
从日志来看,tail监测文件变化并刷新数据时使用到inotify_add_watch。在tail命令指定了参数f时,游注册了文件变化监测请求。在监测请求注册失败时就出现所看到空间不足的现象。
小结
上面两个问题有不同的表现,但问题实质是同一种。在我们找到问题的root cause前,需要我们采用有效的手段是跟踪分析找到根本原因。我们技术人员的知识结构也要及时更新与完善。有不断更新的知识结构,也有合适的问题跟踪与分析方法,才有利于我们快速找到问题并解决问题。
本文出自 “隐林之路” 博客,请务必保留此出处http://wxinhe.blog.51cto.com/6924993/1436437
Inotify数达到限制或文件空间不足的不同表现同一本质原因分析,布布扣,bubuko.com
Inotify数达到限制或文件空间不足的不同表现同一本质原因分析
原文地址:http://wxinhe.blog.51cto.com/6924993/1436437