linux - 防止 Gearman 耗尽系统内存

标签 linux gearman

我目前正在考虑用 Gearman 替换我们的家用酿造批处理处理器。它运行的报告最多可能占用数百兆内存 (PHP)。因此,如果运行过多此类报告,服务器将锁定。我必须添加逻辑以防止控制进程在内存不足时产生许多工作人员并使我们的服务器过载并让它崩溃。

如果我切换到 Gearman,是否有某种类型的逻辑可以在系统内存不足时阻止额外的 worker?我看到了一个限制 worker 的选项,但这并不能直接解决问题。此外,如果一个系统不堪重负,它是否足够智能来平衡系统之间的工作负载?

其他人有什么建议?当条件合适时,我是否可以将自己的支票插入 Gearman 以产生 worker ?或者还有哪些解决方案?

在 LAMP 堆栈上开发,我对 Gearman 不是很熟悉,所以在需要的地方进行指责。

最佳答案

限制工作人员数量是可行的方法 - 如果您希望报告使用 3-400 MB 内存,请将工作人员数量限制在 400MB 左右。

如果您的内存使用率低于预期,您将无法扩展 Gearman 本身来派生工作人员,但您可以创建一个包装器来处理您的工作人员并为您完成。在你走那条路之前,看看扩展 GearmanManager来处理此类问题。然而,我的建议是顺其自然,而不是在你对你期望的负载类型有一些经验后调整工作人员的数量(包括报告请求的速度、报告内存的大小)明智的,以及您需要多快响应请求报告的用户)。

Gearman 会自动负载平衡到响应最快的服务器 - 当任务到达 gearmand 时,它会轮询所有可用的工作人员并告诉他们新任务已经到达,第一个响应的客户端将获得任务。这意味着如果服务器有负载,它对请求的响应会变慢,并且任务通常会在具有更多可用处理能力的服务器上结束(忽略网络延迟的差异)。这也将自动处理不同大小的服务器。

关于linux - 防止 Gearman 耗尽系统内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11585694/

相关文章:

php - Windows cygwin gearman ./configure 显示 "configure: error: Unable to find libevent"错误

python - 如何避免服务器应用程序重启时丢包?

php - 如何在 Amazon AMI EC2 微型实例上安装 GearmanManager?

mysql - 如何用gearman配置mysql?

c++ - SLEEP: (Sleep or usleep) 不是在 Linux 中挂起我线程中的所有内容,而是在 Windows 中?为什么?

php - 排队 mysql 查询的最佳方法是什么?在速度方面

c++ - 使用 packet_mmap 的 RX/TX 是否需要拷贝?

linux - bash如何将一个目录中的大量zip文件移动到指定数量的多个子目录中?

c++ - 在 Hadoop 2.x 中运行 C++ 代码