我正在使用Starman(v0.4014)和ngynx作为前端代理运行Dancer(v1.3202)应用程序。我注意到每两个小时我的负载均衡器出现了一个巨大的延迟峰值,并想知道它是否达到了他们的请求限制并重新启动。延迟从平均30ms到1000ms或更长。我检查了MongoDB,没有长时间运行的查询。 --max-requests对工人实际做了什么以及当工人达到这个限制时会发生什么?
答案 0 :(得分:3)
--max-requests
设置有什么作用?来自starman --help
:
- MAX-请求 每个工作进程处理的请求数。默认 到1000。
这意味着每个工作人员在处理了许多请求后都会退出。然后,主流程将为每个退出的工作人员启动一个全新的工作人员,并根据--workers
设置维护工作人员数量。
使用--max-requests
通常是一件好事,特别是如果你的应用程序不是唯一运行在盒子上的东西,因为perl
(众所周知)不会回馈它使用的内存。工作进程的回收是starman
可以为其他进程提供内存的方式。如果您的应用实际上泄露内存,这也有助于保持您的应用以良好的性能运行,而不是您的应用最终消耗所有内存并且需要被操作系统杀死。
--max-requests
设置的最佳值是什么?除非您有充分的理由进行更改,否则应将其保留为默认值1,000
。如果你的应用程序是盒子上运行的唯一东西,并且你确定它没有泄漏,你可以尝试使用更高的值来减少工作人员的回收。如果您知道您的应用程序漏洞,您可能需要使用较低的值来经常回收工作人员更多。但是,通常这种设置实际上对性能的影响非常小。
也就是说,如果你的工作人员将内容缓存在内存中,因为新工人需要花一些时间来重建这些缓存,回收工作者可以负责虚假的慢速请求,但可能有许多其他可能的解释。您需要进行一些分析,以找出导致您所看到的特定缓慢的原因。