系统空间占用排查 tomcat超大日志catalina.out 删除 与df 状态更新

收到zabbix报警,硬盘空间非常低,inode耗尽。进入系统df一看,只剩下20k。

一、系统空间占用排查

# du -h --max-depth=1 / /*从根目录开始一层一层目录遍历式查找罪魁祸首*/


二、catalina.out占用多达60+G

并且其他诸如catalina.2016-03-29.log等具体日期的日志文件,个别的也有10G左右,直接删除这些大个头。df看稍有改善。针对catalina.out文件,它还在不停增长,可以

# echo > catalina.out /*来清空内容*/

度娘说可以用cronlog这么个东西来分割日志,官网都打不开了。算了,我直接粗暴的删除了这个文件catalina.out。在manager控制台重启tomcat之后,catalina.out不自动生成(bin/catalina.sh负责自动生成它)。 关键是df还是显示只有那么点空间可用。


三、df更新:释放已被删除但正被使用文件占用的空间

df本身没什么问题,都老实展示。但上面删除的catalina.out其实并没有实际释放占用空间,因为它还在被打开使用

(# lsof | grep catalina.out)

(# lsof | grep deleted)

# ls -ld /proc/*/fd/* 2>&1 | fgrep '(deleted)' /*能够看到类似如下格式的内容,非常多条:这里以zabbix的代替,屏幕覆盖了之前catalina.out 的*/

l-wx------ 1 root root 64 Mar 29 10:06 /proc/12787/fd/1 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12787/fd/2 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12788/fd/1 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12788/fd/2 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12789/fd/1 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12789/fd/2 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12790/fd/1 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12790/fd/2 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12791/fd/1 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12791/fd/2 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12792/fd/1 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
l-wx------ 1 root root 64 Mar 29 10:06 /proc/12792/fd/2 -> /var/log/zabbix/zabbix_agentd.log-20160321 (deleted)
这里能够看到进程ID,如12792。其中上边列表的格式为/proc/pid/fd/#,fd=file describer。

# ps -ef | grep 12792 /*一看是java,也就是java/tomcat一致在占用这个删除的catalina.out 造成它实际并未释放*/

# bin/shutdown.sh /*关掉tomcat*/

# ps -ef | grep java /*确认java进程消失*/

# bin/startup.sh /*开启tomcat,java进程随之出现*/

# ls -ld /proc/*/fd/* 2>&1 | fgrep '(deleted)' /*现在那个catalina.out已经没有了*/

# df -h /*空间使用情况统计恢复正常*/


类似地,如果在scp进行途中在sink模式主机(接受资源的主机)上删除正在拷贝的文件,这个文件的空间并不会随着文件删除而立即释放,并且所占用空间还会随着拷贝的继续进行而持续增加,空间必须等到文件拷贝完成后才会释放,文件删除的操作到此才完全结束。


四、catalina.out日志level调整

既然日志文件catalina.out太大,那就调整它的日志记录等级,tomcat日志等级如下:

SEVERE (highest value) > WARNING > INFO > CONFIG > FINE(默认) > FINER > FINEST (lowest value)

# vim conf/logging.properties

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################
1catalina.org.apache.juli.AsyncFileHandler.level = OFF
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
这里我就直接把它关闭了:1catalina.org.apache.juli.AsyncFileHandler.level = OFF,推荐使用WARNING
然后如第三步的shutdown再startup重启tomcat使之生效。

你可能感兴趣的:(DevOps)