我正在使用Starman (v0.4014)和ngynx作为前端代理运行一个Dancer (v1.3202)应用程序。我注意到我的负载均衡器每隔几个小时就会出现一个巨大的延迟峰值,我想知道是不是工作人员达到了他们的请求限制并重新启动。延迟从平均30ms增加到1000ms或更多。我检查了MongoDB,没有长时间运行的查询。--max-request实际上对工作进程做了什么,当工作进程达到这个限制时会发生什么?
发布于 2017-01-09 09:59:30
--max-requests设置的作用是什么?
来自starman --help
--最大请求数每个工作进程处理的请求数。默认为1000。
这意味着每个worker将在处理了这么多请求后退出。然后,主进程将为每个退出的工作进程启动一个全新的工作进程,并根据--workers设置维护工作进程的数量。
使用--max-requests通常是一件好事,特别是如果你的应用程序不是唯一运行在机器上的东西,因为perl (臭名昭著)不会回馈它所使用的内存。这种辅助进程的回收是starman将内存回馈给其他进程使用的方式。如果你的应用程序确实泄漏了内存,这也有助于保持你的应用程序以良好的性能运行,而不是你的应用程序最终消耗了所有的内存并需要被操作系统杀死。
--max-requests设置的最佳值是多少?
您应该将其保留为默认值1,000,除非您有充分的理由对其进行更改。如果你的应用程序是唯一运行在机器上的东西,并且你确定它不会泄漏,你可以尝试使用更高的值来减少回收工人的次数。如果您知道您的应用程序存在漏洞,您可能希望使用较低的值来更频繁地回收工作人员。但是,通常情况下,此设置实际上对性能的影响应该很小。
也就是说,如果你的工人在内存中缓存东西,回收工人可能会对虚假的缓慢请求负责,因为新的工人需要花费一些时间来重建这些缓存,但可能有许多其他可能的解释。您需要进行一些分析,以找出真正导致您看到的特定速度减慢的原因。
https://stackoverflow.com/questions/40312770
复制相似问题