一次检查服务器内存使用

今天发现某服务器内存快满了,想着检查一下内存使用,这里进行一下操作记录

首先锁定是哪个文件或者文件夹占用空间大

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 #注意:新创建的容器会生效,原有容器不生效。