2

我用 perl 框架 Dancer 开发了一个 RESTful 应用程序。此应用程序需要近 1 GB 的内存,加载需要 30 秒。./bin/app.pl此应用程序在单个用户的本地测试中运行良好,然后我尝试使用 Starman(单独或使用 plackup,有和没有保持活动)以几种不同的方式部署以供多租户使用:

plackup -E production -s Starman --workers=10 -p 3000 -a bin/app.pl 
plackup -E production -s Starman --workers=10 -p 3000 -a bin/app.pl --disable-keepalive
plackup -E production -s Starman --workers=10 -p 3000 -a bin/app.pl --disable-keepalive --preload-app
starman --workers=10 -p 3000 -a bin/app.pl

部署成功,但 Starman 为每个查询分配了一些内存,不再释放,因此应用程序很快就会耗尽内存。

我阅读了 Starman、PSGI 和 Dancer 部署的所有文档,包括对NGINX/Starman/Dancer的非常好的解释以及Starman 和内存的类似错误,但它不能解决这个问题,因为我禁用了 keep-alive 和 Starman 仍然保留记忆。

知道为什么 Starman 会吃掉我的记忆吗?谢谢!

4

1 回答 1

1

最后我找到了内存泄漏的位置,对不起 Starman 怪你 :)

在程序中,我们使用了一个绑定库,它在常规执行中完美运行,但由于我无法弄清楚的原因,在多进程情况下会吃掉所有的内存。此错误已发送给 perl 库的作者。

于 2014-01-25T16:19:19.150 回答