我用 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 会吃掉我的记忆吗?谢谢!