Starman的最佳--max-requests设置是什么?

Mad*_*ker 6 perl nginx starman dancer

我正在使用Starman(v0.4014)和ngynx作为前端代理运行Dancer(v1.3202)应用程序.我注意到我的负载平衡器每隔几个小时出现一次巨大的延迟峰值,并想知道是否工作人员达到了他们的请求限制并重新启动.延迟从平均30ms到1000ms或更长.我检查了MongoDB,没有长时间运行的查询.--max-requests对工人实际做了什么以及当工人达到这个限制时会发生什么?

ccm*_*ccm 4

设置有什么--max-requests作用?

starman --help

--max-requests 每个工作进程要处理的请求数。默认为 1000。

这意味着每个工作线程在处理完这么多请求后都会退出。然后master进程会为每个退出的worker启动一个全新的worker,并根据设置维持worker的数量--workers

使用--max-requests通常是一件好事,特别是如果您的应用程序不是盒子上运行的唯一东西,因为perl(众所周知)不会返还它使用的内存。这种工作进程的回收方式starman可以将内存返还给其他进程使用。如果您的应用程序确实泄漏了内存,这也可以帮助您的应用程序保持良好的性能运行,而不是您的应用程序最终消耗所有内存并需要被操作系统杀死。

设置的最佳值是多少--max-requests

您应该将其保留为默认值,1,000除非您有充分的理由更改它。如果您的应用程序是盒子上唯一运行的东西,并且您确定它没有泄漏,您可以尝试使用更高的值来减少回收工作人员的频率。如果您知道您的应用程序存在泄漏,您可能需要使用较低的值来频繁地回收工作线程。然而,一般来说,这个设置实际上对性能的影响很小。

也就是说,如果您的工作人员将内容缓存在内存中,回收工作人员可能会造成虚假的缓慢请求,因为新工作人员需要花费一些时间重建这些缓存,但可能还有许多其他可能的解释。您需要进行一些分析,以找出真正导致您所看到的特定缓慢的原因。