一、前言

最近生产linux服务器有点问题,顺便看了下磁盘空间,居然马上就100%了,非常危险。如果磁盘爆满,感觉服务一定会出问题。

//查看磁盘空间命令
df -h

在这里插入图片描述

这个`/dev/xvda1`就是当前磁盘占用,之前清理过一次,写文章的时候又到54%了。

于是赶紧找了找运行中的java中的日志,看看是否需要清理;发现并不是java日志的问题,java日志配置了,只保存2个月的日志的功能(相当于自带定期清理),检查了文件大小,并不是占用最多的。

然后从根目录下,一层一层找,占用空间最多的文件,最后终于发现,是docker日志的问题。

二、如何查看docker日志位置并清空

1.先查看运行中docker有哪些,找到id

docker ps

在这里插入图片描述

2.使用id,查看docker配置文件,并用grep筛选到日志位置

//075098ae7f30 需要换成自己的docker id
docker inspect 075098ae7f30 | grep LogPath

在这里插入图片描述

注意,路径很长,画圈位置是路径。

3.进入日志位置,可以看下当前日志占用大小

cd /var/lib/docker/containers/075098ae7f3037e3bc7fd582d5eb716eb0cd348a73fc35f8418185c99377bc78


du -sh *

在这里插入图片描述

左边大小,右边那个json.log就是docker日志文件,可以看到占用了104G了,太大了。

4.如果不放心,可以确认下这个文件到底是不是日志文件

tail -200f 075098ae7f3037e3bc7fd582d5eb716eb0cd348a73fc35f8418185c99377bc78-json.log 

这个命令可以显示最后200行文件内容。

5.清空日志文件

直接删除文件不太好,担心万一程序找不到文件报错;一般都是直接改文件内容来清空:

echo '' > 075098ae7f3037e3bc7fd582d5eb716eb0cd348a73fc35f8418185c99377bc78-json.log 

这个命令可以把空字符串写入文件,替换原有内容,就清空了。

6.可以再次确认下,文件确实清空了,服务器大小好了很多。
在这里插入图片描述
在这里插入图片描述

之前54%占用,现在33%占用;文件之前104G,现在4.0K。

三、追记

这个服务器上,java进程在docker里面执行。
java自己打印的日志配置了定期清理,只保留2个月的;
但是docker为什么也会打印这么多日志,按理说java打印就够了,docker不用打印日志的。(不然docker的日志还得定期清理,很麻烦)

后来发现,是因为java打印到控制台的日志,docker就会记录成自己的日志打印出来。

java已经自己生成日志文件了,没必要docker再记录一份,重复。

解决方法就是,java不要打印到控制台。

样例如下:

<!-- 这一段,class用的是ConsoleAppender,负责打印控制台的 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

<!-- 这一段注释掉,意思就是info级别的日志,不采用name=console的配置,就是不采用打印控制台的配置,就不会答应控制台了 -->
<!--	<root level="info">
		<appender-ref ref="console" />
	</root>-->

本人项目用的是logback.xml配置的日志打印;
把打印控制台的配置注释掉,就不会打印控制台了,docker的日志就能少很多。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐