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

解决Zabbix报警:硬盘空间低及inode耗尽问题
本文详细介绍了如何排查并解决Zabbix报警提示的硬盘空间低和inode耗尽问题,包括系统空间占用排查、日志文件过大处理、已删除文件占用空间未释放的原因及解决方案,以及通过调整catalina.out日志记录等级来优化存储空间。通过执行一系列操作,最终实现了空间使用情况统计的正常恢复。

收到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使之生效。

17-Jun-2025 13:44:54.810 ���� [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.startup.ContextConfig.beforeStart ������[/demo01]���쳣�޸�docBase java.io.IOException: �޷������ļ���[C:\Program Files\apache-tomcat-9.0.70\webapps\demo01]�� at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:116) at org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:821) at org.apache.catalina.startup.ContextConfig.beforeStart(ContextConfig.java:960) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:306) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:182) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:696) at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1782) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:293) at java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:814) at java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:802) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:460) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:408) at java.base/jdk.internal.reflect.NativeMe
最新发布
06-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值