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 # 清理构建缓存