在网上找了一段 python 代码,分析服务器将近 2G 的 log 文件,代码执行过程中突然发现狗日的只有 open 没有 close ! Ctrl+C 终止程序的执行后查看内存,发现 Swap 几乎都被消耗殆尽,现在我要怎样才能安全地回收内存?
在网上找了一段 python 代码,分析服务器将近 2G 的 log 文件,代码执行过程中突然发现狗日的只有 open 没有 close ! Ctrl+C 终止程序的执行后查看内存,发现 Swap 几乎都被消耗殆尽,现在我要怎样才能安全地回收内存?
1
xingso Jan 22, 2016
重启电脑可治百病
|
3
28ms Jan 22, 2016
with open('logfile', 'r') as filehandler:
# do your work # end |
4
yuankui Jan 22, 2016
程序退出了内存不就好了吗?
|
5
Tinet Jan 22, 2016
楼上说得对, python 有垃圾回收机制,程序退出后,占用的内存也会释放。你看到 swap 并没有释放应该是 linux 系统的内存使用策略问题,不会影响服务器的正常使用。
|
8
dndx Jan 22, 2016 Python 就算 open 再大的文件也不会直接把所有内容读到内存。要是你直接 read() 了当我没说。
|
10
neoblackcap Jan 22, 2016
@Tinet +1
|
11
harry890829 Jan 22, 2016
这个就算是 c/c++这种没有回收机制的,在 Linux 上和楼主做了同样的事情后, kill 掉也能把占用内存释放啊
|
12
eliteYang Jan 22, 2016
可以设置 log 滚动,再加上一些内存管理,例如 tcmalloc ,可以定时回收内存
|
13
Garantion Jan 22, 2016
pkill python
|
14
Andiry Jan 22, 2016
杀掉进程就行。其实 close 不 close 无所谓,只是多占用一个 file descriptor
|
15
upwell Jan 22, 2016
|
16
shyling Jan 22, 2016 via iPad
open 无所谓的啊,不要一次 read 。。另外进程结束时系统会关闭 fd 的
|
17
salmon5 Jan 22, 2016
这就是 java 中的所谓内存泄漏?
|
18
yonka Jan 22, 2016
你不 close 也只是句柄没被释放啊,怎么会把内存是吗?
f = open(fpath) data = f.read() 这样吗? = = |
21
Kirscheis Jan 22, 2016 via Android
让你不用 with 。。
只是 swap 看上去被占了,应该问题不大吧 |
22
mrytsr Jan 23, 2016 via Android
Sb
|
23
heshaobo Jan 24, 2016
文件操作请使用 with 语句
|