原创

Linux系统释放内存-清理docker占用磁盘

1. 释放内存

1.1. 适用现象

执行top,发现右上角buff/cache占用很大,3条命令执行结束buff/cache由20G降到8G。

1.2. 执行命令

step1: 
清除pagecache
echo 1 > /proc/sys/vm/drop_caches
step2:
清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache
echo 2 > /proc/sys/vm/drop_caches
step3:
清除pagecache和slab分配器中的缓存对象
echo 3 > /proc/sys/vm/drop_caches

1.3. 更多AI解读

在Linux中,触发内存回收并不是通过特定的“命令”来直接发起的,因为内存回收是由内核自动管理的。不过,你可以通过一些命令来影响内存回收的行为,尤其是释放缓存和缓冲区,这样可以释放一部分内存供其他进程使用。以下是几种可以用来影响内存回收的方法:

1:

使用Sync命令

这个命令可以强制文件系统缓冲区中的数据写入磁盘,从而释放这些缓冲区占用的内存。

2:

通过向/proc/sys/vm/drop_caches写入数字,你可以释放不同类型的缓存。

写入1释放pagecache(文件系统缓存)。

写入2释放dentries和inodes缓存。

写入3同时释放pagecache、dentries和inodes缓存。

echo 1 > /proc/sys/vm/drop_caches # 只释放pagecache

echo 3 > /proc/sys/vm/drop_caches # 释放所有缓存

3:

使用sysctl命令

使用sysctl命令,你还可以调整内核参数来控制内存管理行为,比如vm.drop_caches和vm.swappiness。

sysctl -w vm.drop_caches=3

sysctl -w vm.swappiness=10 # 减少交换空间的使用

4:

Kill Processes

如果有特定的进程消耗了大量内存,你可以使用kill或pkill命令来终止它们,这将释放它们占用的内存。

kill -9 <pid>

pkill <process_name>

5:适用top or htop工具

这些工具可以帮助你监控系统资源使用情况,包括内存。你可以使用它们来找出消耗内存最多的进程,并采取行动。请注意,上述命令只是影响了缓存和缓冲区,而不是真正的“内存回收”。真正的内存回收(比如从Swap中读取页面或终止进程)是由内核根据系统状态和策略自动处理的。通常,除非你遇到内存紧张的情况或者进行系统调优,否则不需要手动触发这些操作。

2. 清理docker占用磁盘

2.1. 清理无用的容器

首先,列出所有已停止的容器,然后逐个删除它们:

docker ps -a --filter "status=exited" 			# 列出所有已停止的容器
docker rm $(docker ps -a -q --filter "status=exited") 	# 刷除所有己停止的容器

2.2. 清理无用的镜像

查看所有镜像并删除无用的镜像:

docker images 						# 列出所有镜像
docker rmi <image_id or image_name> 			# 删除指定镜像
docker image prune					# 清理所有不被任何容器使用的镜像

2.3. 清理无用的数据卷

有时,无用的数据卷可能会占用大量空间。首先查看数据卷列表,然后根据需要删除它们:

docker volume ls  					# 列出所有致据卷
docker volume rm <volume_name>				# 删除指致据溢
docker volume prune					# 清理所有未被任何容器使用的教据器

2.4. 清理容器日志文件

容器的日志文件可能会积累大量空间,特别是在生产环境中。可以通过直接删除日志文件或者使用 1ogrotate 等工具来管理和限制日志文件大小。

2.5. 清理 Docker 缓存

docker 构建镜像时会产生缓存文件,这些文件也会占用一定空间。可以使用以下命令清理缓存:

docker builder prune					# 清理构建缓存


正文到此结束
本文目录