情况是这样的:
我有一个 PHP/MySQL Web 应用程序,可以进行一些 PDF 处理和缩略图创建。这是通过在服务器上使用一些第 3 方命令行软件来完成的。这两种处理都会消耗大量资源,甚至会导致服务器阻塞。我想限制这些应用程序可以使用的资源量,以使服务器能够继续为用户提供服务而不会造成太多延迟,因为现在当处理一些繁重的 PDF 时,我的用户不会得到任何响应。
是否可以限制应用程序可以使用的 RAM 和 CPU 数量(所有进程组合)?或者有其他方法来处理此类情况吗?这通常是如何完成的?
答案1
运行它nice -n 20 ionice -c 3
这将使其使用剩余的 CPU 周期并访问其他进程未使用的 I/O。
对于 RAM,您所能做的就是在进程使用的数量超过您希望使用的数量时终止该进程(使用 ulimit)。
答案2
您可以从 php 运行它,但 ionice 需要以 root 身份运行,因此要么使用 sudo 运行 ionice,要么在使用 ionice 运行的服务器进程下运行该 php 脚本。
如果您使用 fastcgi,您可以运行两个不同的引擎,并将高资源工作分配给优先级较低的引擎。
如果您在没有 fastcgi 的情况下使用 Apache,则必须使用 sudo 来运行该命令,请确保 sudo 权限尽可能具体,否则您将面临安全漏洞的风险。