限制从php使用服务器资源

时间:2011-10-06 13:11:29

标签: php resources

在我的网络应用中,我必须生成一些pdf和图表文件。问题是,当用户需要生成这些文件时,服务器将达到100%。

ATM我正在考虑使用一个cron来生成用户可能需要的报告,并且只使用一部分服务器资源更长的时间,而不是某个时刻的所有资源。

这是我从理论的角度思考的问题。我可能错了。请指正。你知道如何用PHP实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

不,不是PHP。

有几种方法可以限制Linux进程的CPU使用率。我发现这个是最优雅的:http://www.cyberciti.biz/faq/cpu-usage-limiter-for-linux/

答案 1 :(得分:0)

有很多方法可以做到这一点(是的,你可以用PHP来做)。

然而,最重要的问题是你真正想要实现的目标。

在一天结束时,如果您的服务器CPU被单个进程()最大化并不重要,只要该进程对服务器正在执行的所有其他操作的影响最小。因此,您需要做的第一件事就是查看系统上所有其他请求的发生情况。

如果确实发现了明显的不利影响,那么解决方案就是:

  1. 在沙箱中运行所需的处理,并限制其可以使用的资源量
  2. 在另一台机器上运行该流程,其中对其他流程的影响将降低到可接受的水平
  3. 在要安排的其他进程较少的情况下运行该进程
  4. 通过cron运行流程将是选项3的一个示例,但您明确询问了如何实现选项1.

    由于瓶颈似乎是CPU,而且如果你看到对其他交易产生影响再次,那么Linux盒子上的方法1的两个解决方案将是:

    1. 在通过'nice'
    2. 启动的单独流程中运行处理
    3. 如果您在非线程环境中运行,请使用curent pid(但请记住在完成时重置优先级)。
    4. 第二种方法不需要第二台机器 - 您可以使用taskset将大多数进程的处理器设置为(例如)除了一个核心之外的所有进程 - 并保留用于运行繁重进程的核心。

      无论如何,您应该熟悉通过网络服务器调用长时间运行的流程的问题。

      注意,如果要在请求之前生成文件,使用cron将是一种明智的方法 - 但如果您想按需执行,那么'at'将是更好的解决方案。