笔记:不要总看df -h也要看下df -i,因INODE满导致的超连接数故障

现象:
数据库出现故障,连接时报错进程不足。
ORA-00020: maximum number of processes (2000) exceeded

分析及处理:
查看数据库进程 发现大约1800个LOCAL=NO进程,此时已经无法进入数据库查询信息。
使用os命令kill掉一些进程以释放资源 --head 取前10条

ps -ef|grep LOCAL=NO|grep -v grep|awk '{print $2}'|head|xargs kill -9

此时进入数据库报错发生改变:

ORA-09925: Unable to create Audit trail file
Linux-x86_64 Error:28no space left on device

此时查看df -h空间尚可,并未使用达90%以上。后向大婶儿求教,方知原因在何处。

原来,是inode满了,而并非磁盘空间满了
通常在数据库检查中,我们都是使用df -h查看磁盘空间的使用情况,往往不会单独再去查询inode信息,而此时就可能因为小文件过多导致在磁盘空间未满的情况下出现inode满的故障。

$ df -i (该信息非故障时信息)
Filesystem             Inodes  IUsed    IFree IUse% Mounted on
/dev/mapper/rootvg-lvroot
                      6553600 683367  5870233   11% /
tmpfs                66112911    275 66112636    1% /dev/shm
/dev/sdbu2              65536     22    65514    1% /boot
/dev/sdbu1                  0      0        0     - /boot/efi
/dev/mapper/rootvg-lvhome
                      1310720    106  1310614    1% /home
/dev/mapper/rootvg-lvopt
                       655360     49   655311    1% /opt
/dev/mapper/rootvg-lvvar
                      1310720   3272  1307448    1% /var

想想,几百万的文件是多么的恐怖!
解决的方案更是简单,删就完了。

查看u01目录下的inode数量

# find /u01 -xdev -printf '%h\n'  | wc -l 
6424976

递归查询某目录下所有文件夹的inod数量

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

最终发现是aud文件导致,此时删除aud文件就能解决故障。

无法正常删除文件

$ rm -rf *
-bash: /bin/rm: Argument list too long

使用

ls | xargs -n 10 rm -fr ls

命令解释为:输出所有的文件名(用空格分割) xargs就是将ls的输出,每10个为一组(以空格为分隔符)

删除文件后,空间释放,数据库恢复正常。

可以使用下面命令批量删除 LOCAL=NO进程

ps -ef |grep LOCAL=NO|grep -v grep|awk '{print $2}' |xargs kill -9
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值