Linux下/var/spool/clientmqueue空间不足的解决(r6笔记第81天)
今天收到一封报警邮件,内容如下: ------------------------------------
报警内容: Free disk space is less than 15% on volume /var ------------------------------------ 报警级别: PROBLEM ------------------------------------ 监控项目: Free disk space on /var (percentage):10 % ------------------------------------ 报警时间:2015.10.07-09:56:24
这条报警邮件的信息已经很清楚了,是/var目录下的空间不足了,我们来看一看是怎么回事。
首先到目录下查看df -h的时候,空间剩余9%,说明这个空间还在不断的收缩中。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 7.8G 908M 6.5G 13% /
/dev/sda6 7.8G 6.7G 746M 91% /var
/dev/sda5 7.8G 2.0G 5.5G 27% /usr
/dev/sda1 122M 12M 104M 10% /boot
tmpfs 48G 36K 48G 1% /dev/shm
/dev/shm 48G 36K 48G 1% /tmp
/dev/sda7 497G 391G 81G 83% /home
然后在/var/spool/clientmqueue下发现了大量的文件,绝大部分的空间消耗都在这儿。
随便拿出一条来看看到底是什么内容。发现是一个脚本在检查listener的日志。
# more dfs32Ct1KE012443
Start: 20140402205501
checking listener listener ...OK
checking listener listener_1525 ...OK
checking listener listener_1528 ...OK
checking listener listener_1523 ...OK
checking listener listener_1522 ...OK
End: 20140402205516
进一步进行验证,拿出最新的5个文件,查看文件内容也是如此。
clientmqueue]# ls -lrt|tail -5
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:02 dft97221Lc010415
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:03 qft97231cW026036
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:03 dft97231cW026036
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:04 qft97241rm007778
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:04 dft97241rm007778
clientmqueue]# more dft97241rm007778
Start: 20151007100401
checking listener listener ...OK
checking listener listener_1525 ...OK
checking listener listener_1528 ...OK
checking listener listener_1523 ...OK
checking listener listener_1522 ...OK
End: 20151007100416
说明基本可以说明是因为检查listener的脚本产生了大量的日志文件。
因为这种日志文件对我们确实没有太多的用处,可以考虑删除,当然直接删除还是会报错误的,可以慢慢分批删除 ls|xargs -n 10 rm
删除后空间马上释放出来了。释放了近6G的文件。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 7.8G 908M 6.5G 13% /
/dev/sda6 7.8G 1.1G 6.4G 15% /var
/dev/sda5 7.8G 2.0G 5.5G 27% /usr
/dev/sda1 122M 12M 104M 10% /boot
tmpfs 48G 36K 48G 1% /dev/shm
/dev/shm 48G 36K 48G 1% /tmp
/dev/sda7 497G 391G 81G 83% /home
问题现在解决了,我们来看看问题是怎么回事,对于crontab 中设置的job如果有输出内容,这些内容会以mail的形式发送给对应的cron job用户,如果这个时候sendmail没有启动就会在这个路径下产生这些日志文件。
首先抓取了最新的文件内容。可以看到文件生成的频率很高,几乎是每分钟一个文件。
clientmqueue]# ll
total 64
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:08 dft97281ag005351
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:09 dft97292uQ011260
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:12 dft972C1Xg025752
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:13 dft972D11d025507
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:14 dft972E1IS008404
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:15 dft972F1Oi023669
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:16 dft972G1Xr006590
-rw-rw---- 1 oracle smmsp 228 Oct 7 10:17 dft972H1I8022068
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:08 qft97281ag005351
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:09 qft97292uQ011260
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:12 qft972C1Xg025752
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:13 qft972D11d025507
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:14 qft972E1IS008404
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:15 qft972F1Oi023669
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:16 qft972G1Xr006590
-rw-rw---- 1 oracle smmsp 919 Oct 7 10:17 qft972H1I8022068
查看crontab -l可以看到,检查脚本执行的频率还是很高的。
2-9,12-29,31-59 * * * * . $HOME/.xxxxprofile;$HOME/dbadmin/scripts/lsnr_check.sh
对于listener的检查,其实不需要这么频繁的监控,可以适当把频率放慢一些,根据普遍的机器设置还是一个小时2次检查。比如这样设置:
9,39 * * * * . $HOME/.xxxxprofile;bash $HOME/dbadmin/scripts/lsnr_check.sh
日志文件清除了,日志文件的生成频率也降低了,但是问题还是指标没有治本。
对于这些检查日志,可以当做一个后台任务,不需要每次检查都生成大量的日志,一种方式就是直接屏蔽日志,比如设置为下面的形式。
9,39 * * * * . $HOME/.xxxxprofile;bash $HOME/dbadmin/scripts/lsnr_check.sh > /dev/null 2>&1
这样这个问题的解决就告一段落了,可见一个很细小的变化经过长年累月的积累就会成为一个明显的问题,监控中的设置频率过高反而可能有潜在的问题。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Jmeter系列之no-gui模式
- Pytest之基本介绍
- 企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)
- 微信小程序的生命周期学习笔记-应用篇
- matplotlib基础绘图命令之plot
- Qt官方示例-样式表
- 入坑 LinkedList,i 了 i 了
- Elasticsearch 利用API进行搜索
- 通过 Serverless Regsitry 快速开发与部署一个 WordCount 实例
- 聊聊dubbo-go的gracefulShutdownFilter
- 强烈推荐:2020年15道优秀的TypeScript练习题 (上集)
- 聊聊dubbo-go的GenericFilter
- Salesforce LWC学习(十九) 针对 lightning-input-field的label值重写
- MySQL定时备份方案
- Nginx多方面调优策略