执行proc_nice()时,它实际上是不错的apache线程吗?

如果是这样,如果当前的用户(非super用户)无法将其原始优先级重命名,那就是在Apache 2.0X服务器上杀死适当的Apache线程(Apache_child_terminate)吗?

问题是我试图限制允许用户运行Ad-Hack查询的应用程序的影响。查询可能是巨大的,结果对数据的转换需要大量的内存和CPU。

我已经重新编写了该过程以使其基于流的更多基础 - 帮助记忆消耗,但我也希望该过程运行较低的优先级。但是,我不能将Apache线程放在很低的优先级中,因为我们在同一框上运行了许多高优先级Web服务。

tia

有帮助吗?

解决方案

在这种情况下,解决方案通常不在Apache过程中做这种重型工作,而是:

  • 运行外部PHP进程,使用类似 shell_exec, ,例如 - 这是您必须以同步模式工作(即,几分钟后不能执行任务)
  • 将任务推到FIFO系统,然后立即向用户返回一条消息,说“您的任务将很快处理”
    • 并还有其他过程 (例如,每分钟通过crontab发射) 检查FIFO队列
    • 并进行处理,队列中有一些东西
    • 该过程本身可以在低优先级模式下运行。


尽可能多地,尤其是如果重量计算需要一些时间,我会选择第二个解决方案:

  • 它允许用户立即获得一些反馈:“服务器已收到您的请求,并将尽快处理”
  • 它不会使Apaches的流程长期“工作”:沉重的工作是通过其他过程完成的
  • 如果有一天,您需要这样的处理能力,以至于一台服务器已经不够了,则这种系统将更容易扩展:只需添加第二个服务器,该服务器将从同一FIFO队列中选择
  • 如果您的服务器真的太载了,您至少可以停止从队列中停止处理,因此负载可以变得更好 - 例如,如果您的关键网络服务在特定的特定中经常使用,则可以很有用大体时间。


其他 (看起来不错,但我还没有尝试过) 解决方案是使用某种工具,例如 装备 :

Gearman提供了一个通用的应用程序框架,可以将工作耕种到更适合完成工作的其他机器或流程。
它使您可以并行工作,加载余额处理以及在语言之间调用功能。
它可以用于各种应用程序,从高可用性网站到数据库复制事件的传输。
换句话说,这是分布式处理方式的神经系统。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top