我使用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为什么要吃我的记忆?谢谢!
答案 0 :(得分:0)
最后我找到了内存泄漏的地方,我很抱歉Starman责备你:)
在程序中我们使用一个绑定库,它在常规执行中非常有效,但由于某种原因我无法弄清楚,在多进程情况下会占用所有内存。此错误已发送给perl库的作者。