最近作产品并发测试的时候,因为日志量比较大,日志系统(Mysql数据库)很快将磁盘空间写满。首先想到用crontab写定时任务监控mysql占用的空间。思路大致如下:
1、首先通过
select round(sum((DATA_LENGTH+INDEX_LENGTH)/1024/1024),3) as size from INFORMATION_SCHEMA.TABLES where TABLE_NAME IN(?)
监控,如果超过阀值则执行清理
2、导出jar备用
3、定义crontab任务 调用jar。参考http://zh.wikipedia.org/wiki/Cron 定义任务脚本
*/1 * * * * /home/archive_log.sh
archive_log.sh内容如下
java -cp /home/archive_log.jar com.XXX.Archive
最后 service crond reload 刷新任务列表
4、遇到的问题总结
开始任务不执行,排查过程如下
1)查看/var/log/cron有输出
2)查看/var/spool/mail/root提示java命令不识别(JAVA_HOME已经定义)
于是在archive_log.sh中加入
JAVA_HOME=/usr/bin/jdk1.7.0_51/ PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export JAVA_HOME HADOOP_HOME PATH CLASSPATH
另外开始写成java -cp archive_log.jar com.XXX.Archive提示找不到main class,-cp写成绝对路径即可
在实际测试过程可能遇到业务进程将Mysql连接占满,导致检测业务无法获取连接的情况,此时需要在检测代码中持有一个连接不关闭,并运行为守护进程。