释放Linux页面缓存
我有一个shell脚本,它会调用大约20个python脚本,每个脚本至少要读取几个500MB大小的文件。在运行了几个python脚本后,我的内存只剩下大约40MB,而我的电脑总共有8GB的内存。我尝试了下面的命令,结果成功了,释放了5.8GB的内存。
echo 1 > /proc/sys/vm/drop_caches
有没有什么方法可以通过python来做到这一点?或者我该如何强制python释放它占用的内存?
4 个回答
1
drop_caches文件是Linux系统特有的,不是Python能做的事情。Python已经释放了内存,只是操作系统还没有从缓存中释放这些内存。
我对Python了解不多,不能直接写出代码,但为什么不直接用上面的“echo”命令做一个系统调用,或者直接写入proc文件系统呢?(当然,前提是确保脚本是在Linux机器上运行。)
3
@lunaryorn 和 @P2bM 的回答方向是对的,但存在安全隐患,因为它们要求你以管理员权限运行整个 python
脚本。如果你的脚本正在开发中,结果出现问题,可能会导致系统崩溃。
另一个问题是,你的脚本创建的所有文件(比如日志等)都会以管理员身份创建,而不是你自己创建的。这在后续处理时会很麻烦。
更安全的做法是只在必要的地方使用 sudo
:
import os
os.system('sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"')
os.system('sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"')
with open('sample.txt', 'w') as f:
f.write('a')
这个脚本只会让你输入一次管理员密码(之后就可以自己运行了),而且你可以确认文件 sample.txt
是由你创建的,而不是由管理员创建的。
5
你为什么不直接打开文件然后写入呢?
with open('/proc/sys/vm/drop_caches', 'w') as stream
stream.write('1\n')
这些其实都是Python的基础知识。