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
MonTubasa
V2EX  ›  Python

flask 内存回收的问题,请教下各位大佬

  •  
  •   MonTubasa · 2022-03-04 20:03:25 +08:00 · 4034 次点击
    这是一个创建于 776 天前的主题,其中的信息可能已经有所发展或是发生改变。
    flask 在并发请求下,内存会逐渐上涨。

    在启动的时候会声明一些全局变量,然后由定时任务发起请求更新这些全局变量,猜测是更新全局变量后造成内存泄漏。
    就想问下,如何动态地去追踪这类内存泄漏
    还有就是,如何在请求结束归还本次请求所占用的所有内存。

    谢谢大佬们!
    9 条回复    2022-03-05 13:43:13 +08:00
    sagaxu
        1
    sagaxu  
       2022-03-04 20:09:58 +08:00 via Android
    设置 max_requests ,每处理 xx 个请求重启进程,能缓解内存泄露。每个请求结束后自动回收,只有 PHP 支持这个特性。
    gstqc
        2
    gstqc  
       2022-03-04 20:12:37 +08:00 via Android
    uwsgi 也可以设置 max requests 的
    追踪内存使用 memory_profiler 之类的
    MonTubasa
        3
    MonTubasa  
    OP
       2022-03-04 21:44:53 +08:00
    @sagaxu 因为是想调用 sklearn 的扩展,每次启动的时候会加载 20G 左右的 model 文件,重启不知道会不会时间很慢。我先试试
    sudoy
        4
    sudoy  
       2022-03-04 22:23:40 +08:00   ❤️ 1
    gunicorn 设置 max_requests 就可以减少内存泄漏
    https://docs.gunicorn.org/en/stable/settings.html#max-requests
    westoy
        5
    westoy  
       2022-03-04 22:36:58 +08:00
    @MonTubasa

    你这个该分离成后端服务, 就不该整合到 web 层里
    zcf0508
        6
    zcf0508  
       2022-03-04 23:50:43 +08:00
    我也遇到这个问题了

    感谢 @sudoy 的回答,不过我还想问下 max_requests 的值设多少比较合适呢?
    Brian1900
        7
    Brian1900  
       2022-03-05 07:18:12 +08:00
    pu 只能重启进程?没更优雅的做法了吗?比如如何找出内存泄漏
    sudoy
        8
    sudoy  
       2022-03-05 09:40:13 +08:00
    @zcf0508 一些大的网站设置 max_requests = 500 ,max_requests_jitter = 200 ,这个具体要根据你的服务器配置来,因为 worker 重启的时候也是吃内存的。gunicorn 19.2 以后就引入 max_requests_jitter ,最好设置 max_requests_jitter ,不然所有 worker 同时重启会导致引发空档期,以下是一些相关文档:

    https://docs.gunicorn.org/en/stable/settings.html#max-requests
    https://linuxtut.com/en/2668a2243a5191bcdc78/
    https://stackoverflow.com/questions/24655713/gunicorn-max-requests-for-production
    MonTubasa
        9
    MonTubasa  
    OP
       2022-03-05 13:43:13 +08:00
    @westoy 是以 web 的形式给其他服务调用,只是说调用的频次比较高
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3719 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:22 · PVG 18:22 · LAX 03:22 · JFK 06:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.