V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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 · May 25, 2020 · 3757 views
    This topic created in 2164 days ago, the information mentioned may be changed or developed.

    最近做一个作业,学习神经网络,然后不想跑一次电脑就轰轰响,就放到云服务器上跑,服务器是一个 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 replies    2020-05-29 09:55:01 +08:00
    laike9m
        1
    laike9m  
       May 26, 2020   ❤️ 1
    看一下这篇文章吧。有一些工具可以 debug 内存泄露
    https://medium.com/zendesk-engineering/hunting-for-memory-leaks-in-python-applications-6824d0518774
    xcstream
        2
    xcstream  
       May 26, 2020   ❤️ 1
    可以开启 swap
    vk42
        3
    vk42  
       May 26, 2020   ❤️ 1
    看下对应的 cmdline ?目测是你的 python console,如果你直接在 console 里面跑的脚本,有些资源是不会释放的
    ipwx
        4
    ipwx  
       May 26, 2020   ❤️ 1
    建议 deployment + 远程 ssh 执行代码。
    zxCoder
        5
    zxCoder  
    OP
       May 26, 2020
    @ipwx 一开始用的 deployment 这个,不过服务端画的图没办法在本地显示
    ipwx
        6
    ipwx  
       May 26, 2020
    @zxCoder 远程 jupyter notebook,本地写代码,deployment 到远程,然后在远程的 jupyter notebook 上运行。
    ipwx
        7
    ipwx  
       May 26, 2020
    jupyter notebook 可以有 notebook (可视化) 也可以有 terminal 。
    ipwx
        8
    ipwx  
       May 26, 2020


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

    这个是 Jupyter Notebook + JupyterLab 插件。
    zxCoder
        11
    zxCoder  
    OP
       May 26, 2020
    @ipwx 输出文件这个好像不错 哈哈
    ipwx
        12
    ipwx  
       May 26, 2020
    @zxCoder 教你一招,把你的工作目录建一个 python package 比如 mylib 。启动 jupyter 的时候把工作目录加到 PYTHONPATH,然后你就能在 Jupyter notebook import 你自己的代码了。
    zxCoder
        13
    zxCoder  
    OP
       May 26, 2020
    @ipwx 这个好像每跑一次脚本都会 ssh 连接一次?刚才华为云直接打电话来问我这几天一直登录服务器有什么问题吗。。。。。
    ipwx
        14
    ipwx  
       May 26, 2020
    @zxCoder emmm pycharm 的 deployment 是会连接啊,要么你换成手工 rsync 。
    sujin190
        15
    sujin190  
       May 27, 2020
    内存小就每次 ssh 进去跑最好了,确保每次跑完进程都退出重启,多连几次 ssh 也没啥吧
    tblxdezhu
        16
    tblxdezhu  
       May 28, 2020
    尽量不要手动 close(),老老实实用 with 。有可能句柄没释放
    fhsan
        17
    fhsan  
       May 29, 2020
    我都是 yield,公司同事发给我一个 excel,看了下都是空白,可偏偏 20M,程序解析 100W 行,excel 最大值了
    使用 yield 按批次处理?
    cpython open 有时候资源不会自动释放,ipython jupyter 之类资源不会释放,比如 [line for f in open(file)]
    p = psutil.Process()
    p.open_files()
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3564 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 10:41 · PVG 18:41 · LAX 03:41 · JFK 06:41
    ♥ Do have faith in what you're doing.