我正在运行Starman (v0.4014)和ngynx作为前端代理的Dancer (v1.3202)应用程序。我注意到我的负载均衡器每隔几个小时就会出现一个巨大的延迟高峰,我想知道这是否是工作器达到了请求限制并重新启动的原因。延迟从平均30ms增加到1000ms或更多。我检查了MongoDB,没有长时间运行查询。max-requests实际上对worker做了什么?当worker达到这个限制时会发生什么?
--max-requests
设置的作用是什么?
源自starman --help
:
——max-requests每个工作进程要处理的请求数。违约1000 .
这意味着每个worker在处理了那么多请求后将退出。然后,主进程将为每个退出的worker启动一个全新的worker,并根据--workers
设置维持worker的数量。
使用--max-requests
通常是一件好事,特别是如果你的应用程序不是唯一在盒子上运行的东西,因为perl
(众所周知)不会给回它使用的内存。工作进程的回收是starman
将内存返回给其他进程使用的方式。如果你的应用程序确实泄露了内存,这也可以帮助你的应用程序以良好的性能运行,而不是你的应用程序最终消耗所有的内存,需要被操作系统杀死。
--max-requests
设置的最优值是什么?
你应该保持它的默认值1,000
,除非你有很好的理由去改变它。如果你的应用程序是唯一运行在盒子上的东西,你确定它没有泄漏,你可以尝试使用更高的值来减少工人的回收频率。如果你知道你的应用有漏洞,你可能想要使用一个更低的值来更频繁地回收worker 。但是,通常这个设置对性能的影响应该很小。