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