inode问题故障1例
故障关键字:ext3_dx_add_entry: Directory index full!

线上业务的一台服务器无缘无故突然挂了
让机房帮忙连接显示器后发现报错

http://image.kbnix.com/Blog/monitor_error.jpg

遂让机房重启了

重启后能正常进入系统,查看/var/log/message后,依然发现有这个报错,而且是持续了很久了,看来是没关注好这类型错误

先是马上查看了硬盘的inode数

df -i看,没有异常,inode use采用了14%

再Google一下,说是ext3文件系统单个目录下不能超过32000个节点

然后就查一下到底是哪个目录占用inode过多了

for i in /*; do echo $i; find $i |wc -l; done

这时候在/var目录下卡住了半天不出结果
接着进入/var里面查看一下
先是看了/var下的xdebug目录跟tmp目录,都是空的,没有异常
随手进入了spool目录
ll一看,惊呆了,其他目录都是4096大小的,里面的一个目录clientmqueue是一个天文数字
ll -h一看,1017M的目录。。。我去,这里面隐藏了多少inode
马上Google之,说是计划任务cron由于没有把输出重定向掉,而导致的,cron会把执行的计划任务的输出以mail的形式发给指定的管理员账户,默认是发给root的,然后由于没有安装或者开启sendmail服务,就会把邮件积压在这个目录里面

马上检查crontab,/etc/crontab,/etc/cron.d/*,/var/spool/cron/root,都看了,所有计划任务都是加了重定向>/dev/null 2>&1的

那就奇怪了,怎么没效果呢
马上把目录移除掉rm -rf,rsync –delete,ls | xargs rm -f都好像卡死了一样没效果

果断把它先mv掉,然后重建一个给它,发现cron继续往里面写文件了,看一下内容,都是cron的输出,重启一下crond看看,还是老样子,没效果,继续写

暂时解决办法:
把clientmqueue目录mv掉,不建立目录了,让cron无处可写,然后现在挂在screen里用rsync –delete的方法来删掉mv过的clientmqueue目录,挂了一晚,一直还卡在那,想看看有没在删
ps aux | grep rsync获取pid,然后strace -p pid,看到进程一直在unlink了,这下才放心,确定它是一直在删除的了
df -i再看看,inode use降到了8%了,目前还在删

后续
删了1天半,终于删完了
后面把sendmail服务删掉就没有再往clientmqueue写文件了

yum remove sendmail

EXT3_DX_ADD_ENTRY: DIRECTORY INDEX FULL!的更多相关文章

  1. [原][openstack-pike][controller node][issue-3][horizon] dashboard show internal error 500 Cannot serve directory /var/www/html

    问题点: 安装完pike后发现只能使用 ip:80 登录到http的主页面 不能使用 http://controller_ip:80/dashboard 登录openstack登录页面.如下图 重启h ...

  2. Python3.5 day4作业:对员工信息文件,实现增删改查操作。

    需求: 1.可进行模糊查询,语法至少支持下面3种: 1.select name,age from staff_table where age > 22 2.select  * from staf ...

  3. [转]Part1: Understanding !PTE , Part 1: Let’s get physical

    http://blogs.msdn.com/b/ntdebugging/archive/2010/02/05/understanding-pte-part-1-let-s-get-physical.a ...

  4. mysql5.5手册读书日记(3)

    <?php /* MySQL_5.5中文参考手册 587开始 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修 ...

  5. .htaccess文件的详解以及404页面的设置

    打开记事本,写入以下代码: ErrorDocument 404 /404.html保存成.htaccess文件上传到网站的根目录. /404.html是目录名和文件名,可以改成自己的名字.QUOTE: ...

  6. nginx 跨域。。。掉坑里了,小心

    今天公司产品一个功能突然挂掉了...向客户演示之前出现了,手机端显示不能获取下载资源,可是急坏了一票人.. 通过手机端,调查服务器地址调用了http:/2342342.domain.hostname. ...

  7. 开发DZ插件教程

    插件制作的基本思路是:(初学者适用)1.形成插件思路2.制作插件界面3.构架程序模块4.搭建存储数据5.填充功能语句6.检查应用错误7.完善插件功能 前言:为方便互联网数万Discuz!爱好者,更加深 ...

  8. 13.1.17 CREATE TABLE Syntax

    13.1.17 CREATE TABLE Syntax 13.1.17.1 CREATE TABLE ... LIKE Syntax 13.1.17.2 CREATE TABLE ... SELECT ...

  9. Nginx 配置指令的执行顺序(六)

    前面我们在 (五) 中提到,在一个 location 中使用 content 阶段指令时,通常情况下就是对应的 Nginx 模块注册该 location 中的“内容处理程序”.那么当一个 locati ...

随机推荐

  1. hadoop常见错误集锦

    1  Hadoop namenode -format后Incompatible namespaceIDS 错误解决办法 重新格式话namenode后,会重新分配一个namespaceId, 这个nam ...

  2. Interview----求 1+2+...+n, 不能用乘除法、for、while if、else、switch、case 等关键字以及条件判断语句 (A?B:C)

    题目描述: 求 1+2+...+n, 要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). 分析: 首先想到的是写递归函数,但是遇 ...

  3. NSArray(二) 、 NSMutableArray 、 NSSet 、 NSMutableSet

    1 创建五个学生对象,放入数组并遍历 1.1 问题 创建一个自定义类TRStudent,为该类生成五个对象.把这五个对象存入一个数组当中,然后遍历数组. 1.2 步骤 实现此案例需要按照如下步骤进行. ...

  4. LeetCode Binary Tree Postorder Traversal(数据结构)

    题意: 用迭代法输出一棵二叉树的后序遍历结果. 思路: (1)用两个栈,一个存指针,一个存标记,表示该指针当前已经访问过哪些孩子了. /** * Definition for a binary tre ...

  5. JavaScript数据结构——集合、字典和散列表

    集合.字典和散列表都可以存储不重复的值. 在集合中,我们感兴趣的是每个值本身,并把它当作主要元素.在字典和散列表中,我们用 [键,值] 的形式来存储数据. 集合(Set 类):[值,值]对,是一组由无 ...

  6. MySQL 添加列,修改列,删除列

    创建后表的修改 alter table 语句用于创建后对表的修改, 基础用法如下: 添加列 基本形式: alter table 表名 add 列名 列数据类型 [after 插入位置]; 示例: 在表 ...

  7. 世纪互联运营的Microsoft Azure正式支持FreeBSD虚拟机镜像

    自2012年开始,微软云计算与企业事业部和Citrix思杰,NetApp达成合作,共同开发出第一版针对Hyper-V虚拟设备驱动以及相关的用户态程序,并将此称之为集成服务(Integration Se ...

  8. Sharded实现学习-我们到底能走多远系列(32)

    我们到底能走多远系列(32) 扯淡: 工作是容易的赚钱是困难的 恋爱是容易的成家是困难的 相爱是容易的相处是困难的 决定是容易的可是等待是困难的 主题: 1,Sharded的实现    Sharded ...

  9. Spring3整合Hibernate4-我们到底能走多远系列(30)

    我们到底能走多远系列(30) 扯淡: 30篇啦!从2012-08-15开始的系列,东平西凑将近一年的时间也就这么几篇.目标的100篇,按这个速度也要再搞两年呢. 发博客果然不是件容易的事,怪不得更多的 ...

  10. 获得项目的绝对地址 getRequestURI,getRequestURL的区别

    java获得tomcat项目的绝对地址 String basePath = request.getScheme()+"://"+request.getServerName()+&q ...