当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching
因此我们很有必要手动清理系统缓存释放内存。
我们在清理缓存前应该先
sync下
因为系统在操作的过程当中,会把你的操作到的文件资料先保存到buffer中去,因为怕你在操作的过程中因为断电等原因遗失数据,所以在你操作过程中会把文件资料先缓存。
所以我们在清理缓存先要先把buffe中的数据先写入到硬盘中,sync命令
sync
手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
最后,输入手动释放内存的命令
echo 3 > /proc/sys/vm/drop_caches
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存
free -h
free -h #看内存是否已经释放掉了。
total——总物理内存
used——已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存
free——完全未被使用的内存
shared——应用程序共享内存
buffers——缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加)
cached——缓存,用于已打开的文件
补充更新:2018.06.27
1.Linux 磁盘空间清理
执行 lsof | grep deleted发现有大量刚刚删除文件的进程存在,kill掉进程(或者重启进程) OK
- 用du检查发现各目录占用的空间:
3.文件恢复问题
参考 https://blog.csdn.net/dutsoft/article/details/51248761
4.快速定位较大文件目录并清理硬盘
分以下步骤进行:
1)查看磁盘信息:df -lh
Filesystem Size Used Avail Use% Mounted on
udev 3.8G 0 3.8G 0% /dev
tmpfs 769M 68M 702M 9% /run
/dev/sda6 265G 252G 0 100% /
tmpfs 3.8G 126M 3.7G 4% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
/dev/loop0 87M 87M 0 100% /snap/core/4830
/dev/loop1 87M 87M 0 100% /snap/core/4650
/dev/loop2 254M 254M 0 100% /snap/electronic-wechat/7
/dev/loop3 198M 198M 0 100% /snap/polarr/3
/dev/loop4 87M 87M 0 100% /snap/core/4917
tmpfs 769M 100K 769M 1% /run/user/1000
可以看到系统硬盘/dev/sda6 占用100%了
2)循环定位最大文件目录:du -h --max-depth=1
显然最大的文件目录在/home下
接着,循环定位:
可以看到,最大的文件其实在 ~/.local/share/Trash 下,而这个正是LInux下的垃圾箱(可以理解为windows回收站)
平常想清理的话直接使用
sudo rm -rf ~/.local/share/Trash
最终我们成功清理了121G 的垃圾占用
3)定位最大文件
ls -lhS
4)确认删除的文件是否仍被占用
/usr/sbin/lsof |grep deleted
根据第二列的pid,输入 kill -9 xxxx 杀掉进程xxxx
/dev/loop 100%的时候清理:
我们可以看到图中的loo0-loop11占用100%,我们只要清理掉一下就可以了.
命令: