我已经用perl framework 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会吃掉我的记忆吗?谢谢!
发布于 2014-01-26 00:19:19
最后,我找到了内存泄漏的地方,很抱歉Starman责怪你:)
在程序中,我们使用了一个绑定库,它在常规执行中工作得很好,但由于某种原因,我无法理解,在多进程的情况下,它会消耗掉所有的内存。此错误已发送给perl库的作者。
https://stackoverflow.com/questions/20996749
复制相似问题