pypy 内存占用问题

2017 年 8 月 28 日
 cloudyplain

不知道论坛有玩 pypy 的高手吗? 基础架构:gunicorn+gevent+pypy5.8,由于 jit 的原因 qps 的确有明显提升,但在大量并发请求时内存会突然飙升,用 psutil 查看: 不知道没有什么工具查看这部分内存是怎么分布的?谢谢! ps:guppy 以及 pyrasite 等,pypy 都无法支持。

6439 次点击
所在节点    Python
18 条回复
janxin
2017 年 8 月 28 日
试试 objgraph?pypy 没有生产上过,帮不上什么忙
billlee
2017 年 8 月 28 日
据说,Quora 切换到 pypy 后又因为内存问题换回 CPython 了
SlipStupig
2017 年 8 月 28 日
过来人经验告诉的告诉你,90%是你的代码问题,检查一下是不是有对象一直占用着,gc 回收周期是否过长,剩下的就是 pypy 神坑,会莫名其妙的 crash 掉
gouchaoer
2017 年 8 月 28 日
request 到了 1000 重启
gouchaoer
2017 年 8 月 28 日
脚本语言常驻内存做 http server 很容易泄露
sujin190
2017 年 8 月 28 日
pypy 似乎是为了尽可能减少 gc 而会使用比较多内存,可以设置 gc 相关的环境变量限制其最大内存就可以了
一直稳定在生产环境用,内存使用量巨大是个很大的问题,而且其本身提供的 gc 相关的信息有太少
sujin190
2017 年 8 月 28 日
@gouchaoer #4 不靠谱,pypy 本来就是为了高并发的,每秒一千请求才起步还没预热的,你就重启,还用什么的 jit 啊
gracece
2017 年 8 月 29 日
tempdban
2017 年 8 月 29 日
@sujin190 这个哥们和 Python 有关的问题基本都要强答一遍,基本都要被人喷。
tempdban
2017 年 8 月 29 日
@gouchaoer 脚本语言常驻内存很容易内存泄漏
贼 6666666666
sagaxu
2017 年 8 月 29 日
cloudyplain
2017 年 8 月 29 日
@SlipStupig 目前看上去不是业务代码本身的问题,可能是 gevent 的问题
cloudyplain
2017 年 8 月 29 日
@janxin objgraph 貌似没什么用,不过谢谢了。
terrawu
2017 年 8 月 29 日
pypy 和 gevent 相性不和,强烈推荐 pypy + tornado
cloudyplain
2017 年 8 月 29 日
@terrawu 怎么不和,还请解释下? 切 tornado 业务代码要重构代价太大。
terrawu
2017 年 8 月 29 日
@cloudyplain 语言无关,runtime gc 最怕的就是所谓的 ffi 问题。比如 gevent 重度使用了 c 来实现协程和其他工具类。这在 cpython 是优势(效率高,内存使用效率也好)。但在 pypy 是相当的劣势 -- pypy gc 不得不追踪的 gevent c 调用,然后很难及时释放它。

pypy 的成功案例或演示案例基本都是 tornado 这种接近纯 python 的例子。
cloudyplain
2017 年 8 月 29 日
@terrawu 感谢回复,不过我简单看了下 gevent 在 pypy 环境下并不是使用 cpython 的 greenlet 而是自己实现的 greenlet.py ,另外 gevent 针对 pypy 放弃了 cython 而是使用 cffi 调用 c,这是目前 pypy 推崇的方式。接触 pypy 时间很短,可能有错。
est
2017 年 8 月 29 日
@gouchaoer 正解。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/386413

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX