Starman用Dancer REST api消耗所有记忆

时间:2014-01-08 13:15:21

标签: perl memory dancer plack starman

我使用perl框架Dancer开发了一个RESTful应用程序。此应用程序在内存中需要大约1 GB,并且需要30秒才能加载。对于单个用户,此应用程序在./bin/app.pl的本地测试中运行良好,然后我尝试使用Starman(单独或使用plackup,有和没有keep-alive)进行部署,以多种方式使用多租户:

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 and memory的类似错误,但它没有解决这个问题,因为我禁用了keep -alive和Starman仍记忆犹新。

知道Starman为什么要吃我的记忆?谢谢!

1 个答案:

答案 0 :(得分:0)

最后我找到了内存泄漏的地方,我很抱歉Starman责备你:)

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