Python 内存的一个问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zxCoder
V2EX    Python

Python 内存的一个问题

  •  
  •   zxCoder 2020-05-25 23:32:07 +08:00 3608 次点击
    这是一个创建于 2045 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近做一个作业,学习神经网络,然后不想跑一次电脑就轰轰响,就放到云服务器上跑,服务器是一个 1G 的那种学生机。

    代码就是读取一些文本文件,IMDB 这个数据集,大概几万个文件,然后就词向量什么的搞成一个矩阵,然后跑神经网络,大概就是这样。

    我在 pycharm 里用 ssh 远程解释器跑的,为了不频繁的 ssh 连接,我就勾选了那个 run with python console,然后我就发现,正常跑了一次代码之后,没有问题,控制台也正常显示>>>,这时候如果再跑刚才那个程序,就会报错

    Process finished with exit code 137 (interrupted by signal 9: SIGKILL)

    这个错误应该是内存不足导致的,然后我就用 top 命令查看了服务器的情况,发现明明代码已经跑完,但是还是 python3 的一个进程还占用接近 50%的内存?是还在读取文件什么吗,但是我上一个程序已经正常跑完了。

    文件也不太大,我都是 open,然后 read 这样读取的,所有 open 的地方也都 close 了。

    这可能会是哪里出问题了呢?

    17 条回复    2020-05-29 09:55:01 +08:00
    laike9m
        1
    laike9m  
       2020-05-26 00:26:30 +08:00   1
    看一下这篇文章吧。有一些工具可以 debug 内存泄露
    https://medium.com/zendesk-engineering/hunting-for-memory-leaks-in-python-applications-6824d0518774
    xcstream
        2
    xcstream  
       2020-05-26 00:34:57 +08:00   1
    可以开启 swap
    vk42
        3
    vk42  
       2020-05-26 01:07:59 +08:00 nbsp; 1
    看下对应的 cmdline ?目测是你的 python console,如果你直接在 console 里面跑的脚本,有些资源是不会释放的
    ipwx
        4
    ipwx  
       2020-05-26 01:19:38 +08:00   1
    建议 deployment + 远程 ssh 执行代码。
    zxCoder
        5
    zxCoder  
    OP
       2020-05-26 08:35:01 +08:00
    @ipwx 一开始用的 deployment 这个,不过服务端画的图没办法在本地显示
    ipwx
        6
    ipwx  
       2020-05-26 12:12:22 +08:00
    @zxCoder 远程 jupyter notebook,本地写代码,deployment 到远程,然后在远程的 jupyter notebook 上运行。
    ipwx
        7
    ipwx  
       2020-05-26 12:12:46 +08:00
    jupyter notebook 可以有 notebook (可视化) 也可以有 terminal 。
    ipwx
        8
    ipwx  
       2020-05-26 12:14:15 +08:00


    zxCoder
        9
    zxCoder  
    OP
       2020-05-26 13:54:41 +08:00
    @ipwx 谢谢提醒,不过我不太习惯 notebook 写起来很别扭
    ipwx
        10
    ipwx  
       2020-05-26 14:06:23 +08:00
    @zxCoder 不用 notebook 你可以把画图脚本上传上去,然后左边找到输出文件,打开看就行了。

    这个是 Jupyter Notebook + JupyterLab 插件。
    zxCoder
        11
    zxCoder  
    OP
       2020-05-26 14:11:50 +08:00
    @ipwx 输出文件这个好像不错 哈哈
    ipwx
        12
    ipwx  
       2020-05-26 14:15:40 +08:00
    @zxCoder 教你一招,把你的工作目录建一个 python package 比如 mylib 。启动 jupyter 的时候把工作目录加到 PYTHONPATH,然后你就能在 Jupyter notebook import 你自己的代码了。
    zxCoder
        13
    zxCoder  
    OP
       2020-05-26 15:24:43 +08:00
    @ipwx 这个好像每跑一次脚本都会 ssh 连接一次?刚才华为云直接打电话来问我这几天一直登录服务器有什么问题吗。。。。。
    ipwx
        14
    ipwx  
       2020-05-26 15:52:51 +08:00
    @zxCoder emmm pycharm 的 deployment 是会连接啊,要么你换成手工 rsync 。
    sujin190
        15
    sujin190  
       2020-05-27 15:51:56 +08:00
    内存小就每次 ssh 进去跑最好了,确保每次跑完进程都退出重启,多连几次 ssh 也没啥吧
    tblxdezhu
        16
    tblxdezhu  
       2020-05-28 16:02:25 +08:00
    尽量不要手动 close(),老老实实用 with 。有可能句柄没释放
    fhsan
        17
    fhsan  
       2020-05-29 09:55:01 +08:00
    我都是 yield,公司同事发给我一个 excel,看了下都是空白,可偏偏 20M,程序解析 100W 行,excel 最大值了
    使用 yield 按批次处理?
    cpython open 有时候资源不会自动释放,ipython jupyter 之类资源不会释放,比如 [line for f in open(file)]
    p = psutil.Process()
    p.open_files()
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4321 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 04:02 PVG 12:02 LAX 20:02 JFK 23:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86