一个由INode节点爆满引起的业务故障

时间:2022-09-18 21:19:10

一个由INode节点爆满引起的业务故障

http://2358205.blog.51cto.com/2348205/1747951

好久没有写博文了,今天周六,分享一下刚刚处理完的一个小故障

现象描述:

运营妹纸那边反应运营后台报错,具体如下:

一个由INode节点爆满引起的业务故障

一开始以为是tmp的目录没有权限写入,查看目录权限,777,不是这个问题;

查看nginx的错误日志,部分错误信息如下,500错误:

113.xx.xx.48 - - [05/Mar/2016:19:33:09 +0800] "POST /index.php?r=site/login HTTP/1.1" 500 112266 "http://xxx.xxx.com/index.php?r=site/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"

14.xx.xx.67 - - [05/Mar/2016:19:33:14 +0800] "GET /index.php?r=site/login HTTP/1.1" 500 120922 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0"

查看mysql的错误日志,日志如下,但是查看了较早以前,也有以下报错,之前不出现问题,为什么偏偏这时候报错,应该不是这个问题引起的,继续查...

一个由INode节点爆满引起的业务故障

登陆进数据库,查看数据库表,可以select表数据,但是desc结构的时候,连续desc了几张表,结果都一样,报以下错误:

一个由INode节点爆满引起的业务故障一个由INode节点爆满引起的业务故障

难道是表损坏了?屁颠屁颠执行表修复命令,命令如下:

/usr/local/mysql/bin/mysqlcheck --all-databases -uUSERNAME -pPASSWORD -r

部分表修复过程如下:

一个由INode节点爆满引起的业务故障

修复完成之后,妈蛋,还是一样的报错信息,

仔细看看,妈蛋,这是写不了临时文件的意思吗?但是为什么desc会涉及创建临时文件的问题呢?有待深究!!

ERROR 1 (HY000):Can't create/write to file '/tmp/#sql_3b25_0.MYI' (Errcode:28)

是不是磁盘空间满了?没收到报警信息啊。。。抱着疑惑的心态查看了下磁盘空间,具体如下:

[root@xxxxxx ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/xx1       20G  6.9G   12G  37% /

tmpfs           3.9G     0  3.9G   0% /dev/shm

/dev/xxx        63G   26G   34G  44% /mnt

没满啊。。。奇怪。。看下my.cnf文件是不是有什么改动。

vim的时候报了一个错误。如下:

E303:Unable to open swap file for "my.cnf",recovery impossible

一开始没留意,继续编辑,看了下文件里面的内容,没改动啊,权限和属主也是正常的,那就奇怪了。。

然后vim一下其他文件,也是有提示错误。。。。无法创建交换文件。。

于是我试试touch一下,哎呀,创建不了新文件,mkdir呢,也是一样。。提示没有磁盘空间。。。

touch: cannot touch `e': No space left on device

刚刚df -h不是很明显还有空间么。难道是文件的节点数满了?果断df -i一下。。。

[root@xxxx ~]# df -i

Filesystem      Inodes  IUsed   IFree IUse% Mounted on

/dev/xxx     1310720 171826 1138894   100% /

tmpfs          1007261      1 1007260    1% /dev/shm

/dev/xxx      4194304 463685 3730619   12% /mnt

果然,/目录的节点数使用了100%,于是,问题找到了,那再查查到底是什么文件占用了这么多的文件节点.

最后定位到/var/spool/clientmqueue下面有很多的小文件。

说明:系统中cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;

既然知道这个文件产生的原因,删除掉呗,当前保证业务能正常运行最重要。

cd到/var/spool/clientmqueue这个目录下,使用rm -rf ./*  ,哎呀,不给删?报错:

/bin/rm: argument list too long

最后使用ls |xargs rm -rf 删除。。。。

说明:使用rm默认接收的参数是有限的,使用此命令可以将文件名输出并且分组删除。。

使用df -i再次查看,/目录的节点数也释放了一些。再次访问业务,搞定!!

[root@xxxx clientmqueue]# df -i

Filesystem      Inodes  IUsed   IFree IUse% Mounted on

/dev/xxx     1310720 171826 1138894   14% /

tmpfs          1007261      1 1007260    1% /dev/shm

/dev/xxx      4194304 463685 3730619   12% /mnt

说明:inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。

监控系统里除了剩余磁盘容量监控,应该把剩余inode数量监控也要加上~
df.bytes.free.percent; df.inodes.free.percent


/var/spool/clientmqueue/目录下存在大量文件的原因及解决方法 2
 http://blog.itpub.net/22036495/viewspace-1056821/

问题现象:linux操作系统中的/var/spool/clientmqueue/目录下存在大量文件。

原因分析:

  系统中有用户开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;

  解决办法:
  1、 将crontab里面的命令后面加上> /dev/null 2>&1

一个由INode节点爆满引起的业务故障的更多相关文章

  1. linux inode节点数报警处理

    1.问题描述 zabbix 收到一台服务器的Free inodes is less than 20% on volume / 报警 登陆服务器查看 产生原因:一般就是小文件比较多,占用大量的inode ...

  2. 理解inode以及软硬连接,和inode磁盘爆满的解决方案以及文件权限

    理解Linux的软硬链接 创建硬链接的命令 [root@centos6 data]#ln /data/f1 /data/f2 [root@centos6 data]#ll -itotal 1613 - ...

  3. Linux-详解inode节点

    Linux inode节点 inode查看命令 stat 功能:列出文件大小,文件所占的块数,块的大小,主设备号和次设备号,inode number,链接数,访问权限,uid,gid,atime,mt ...

  4. Linux文件系统中的inode节点详细介绍

    这篇文章主要介绍了Linux文件系统中的inode节点,详细讲解了inode是什么.inode包含的信息.inode号码的相关资料等,需要的朋友可以参考下 一.inode是什么? 理解inode,要从 ...

  5. 磁盘inode节点被占满的解决方法

    问题: Linux服务器,查看日志发现程序无法继续写文件,但是用df -h查看磁盘容量还有剩余. 排查思路:怀疑是机器的inode节点被占满,使用df -i查看磁盘inode节点使用情况,果然是ino ...

  6. inode节点

    目录 一.简介 二.信息 inode的内容 inode的大小 3.inode号码 三.目录文件 四.硬连接 五.软链接 六.inode的特殊作用 一.简介 理解inode,要从文件储存说起. 文件储存 ...

  7. 命令passwd报错因inode节点处理记录

    命令passwd报错因inode节点处理记录故障现象:1.修改密码时报错 passwd: Authentication token manipulation error2.添加用户报错:unable ...

  8. 转:命令passwd报错因inode节点处理记录

    命令passwd报错因inode节点处理记录 原文:http://blog.sina.com.cn/s/blog_506ed9e6010106kj.html 故障现象:      1.修改密码时报错 ...

  9. [Swift]LeetCode1019. 链表中的下一个更大节点 | Next Greater Node In Linked List

    We are given a linked list with head as the first node.  Let's number the nodes in the list: node_1, ...

随机推荐

  1. ie兼容问题整理

    1.连续发请求问题 *  jquery(document).ready(function(){}) *  连续发请求ie8出问题,被拦截问题,url后边加时间戳    *  例  url : url+ ...

  2. Twisted介绍

    Twisted诞生于2000年初,作者为Glyph,目的是为了开发网络游戏. Twisted的历史 Glyph开始采用Java多线程,来开发Twisted Reality,结果多线程使得开发变得复杂, ...

  3. floyd+动态规划 hdu-4571-Travel in time

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4571 题目大意: 有n个景点,每个点都有个游玩时间ci,游玩后得到的满意度si.给一个起点s和终点e ...

  4. 深入理解extern使用方法

    一. extern做变量声明 l  声明externkeyword的全局变量和函数可以使得它们可以跨文件被訪问. 我们一般把全部的全局变量和全局函数的实现都放在一个*.cpp文件中面,然后用一个同名的 ...

  5. HDU1258 Sum it up

    Sum it up 题意:给定一个数sum,和n个数,求sum可以由这n个数里面的那几个数的和表示. Given a specified total t and a list of n integer ...

  6. sublime的使用技巧

    ctr+shift+d是复制当前行当下一行2.使用Sublime text 3 编写代码是一种享受,使用Sublime text 3 格式化HTML代码,需要安装插件,具体安装步骤如下:1.打开菜单- ...

  7. layui 根据后台传来的值选择按钮

    {{# if(d.status == 'xxx'){ }} <a class="layui-btn layui-btn-xs layui-btn-disabled" lay- ...

  8. Jmeter笔记(Ⅲ) Jmeter的非GUI操作

    在启动Jmeter时,我们会看到这样一句提示: 不要使用GUI模式(界面模式)进行负载测试,GUI模式只能用于创建测试和调试.进行负载测试时,需要时用非GUI模式. 那么为什么进行负载测试时一定要用非 ...

  9. sc (service control )

    SC 是用来与服务控制管理器和服务进行通信 net: net start 服务名 net stop 服务名 sc: sc config 服务名 start= demand    //手动 sc con ...

  10. Yii2 Apache &plus; Nginx 路由重写

    一.什么是路由重写 原本的HTTP访问地址: www.test.com/index.php?r=post/view&id=100 表示这个请求将由PostController 的 action ...