一次检查服务器内存使用
今天发现某服务器内存快满了,想着检查一下内存使用,这里进行一下操作记录
首先锁定是哪个文件或者文件夹占用空间大
du -sh* #列出当前目录下各个文件或文件夹大小,文件多的话也可以接管道符|进行sort、grep等操作
发现是docker以及journal这两个占大头(即每个占比都大于总内存的10%)
journal
journal是systemd日志记录系统,查一下默认最大为系统内存的10%,需要注意的是删除后不会自动新建。 可以通过取消注释和更改以下内容来控制持久日志的最大大小:
vim /etc/systemd/journald.conf
SystemMaxUse=50M
docker
检查发现Overlay2目录占用磁盘空间过大,原因简单说一下:
- 容器内的服务往容器本地写文件,但没有将写文件的路径挂载出来,导致文件被存储在容器内,而不是宿主机上。例如,一个服务在运行了一年多后,写入容器内本地的文件最终导致占用增加。
- 容器的日志文件过大,没有进行适当的限制。
- Docker未使用的容器、镜像、缓存等过多,这些资源可能会占用不必要的空间。
- Docker默认路径存放不合理,可能导致某些文件被重复存储。
解决方式:
- 检查容器内的服务是否有写文件到容器的行为,如果有,需要将写文件的路径挂载出来,或者直接在容器里删除文件。
- 清理未使用的容器、镜像、缓存等资源,以节省空间。
- 检查Docker的默认存储路径是否合理,并进行必要的调整。
- 如果问题依然存在,可能需要删除对应的容器和镜像,以释放占用的空间。
检查发现我的docke日志占比并不大,无需清理。不过也推荐进行日志大小限制,如下: 有两种方式 第一种是针对单个容器进行限制
docker run --log-opt max-size=10m --log-opt max-file=3
第二种是全局限制,编辑 /etc/docker/daemon.json 文件添加
"log-opts": {"max-size":"10M","max-file":"3"}
systemctl daemon-reload #重新加载配置
systemctl restart docker #注意:新创建的容器会生效,原有容器不生效。