Php 如何为Apache提供更多内存

Php 如何为Apache提供更多内存,php,algorithm,apache,cpu,Php,Algorithm,Apache,Cpu,我在Centos 7上使用PHP和Apache 2.4来运行一个非常CPU密集的概率模型。我花了8天时间在家里的电脑上运行它,所以我决定把它转移到云服务中。所以我配置了它,现在只需要5个小时。太好了 但是有一个问题,在处理算法时,我检查了云上的free和top命令,它报告说使用了大约24%的CPU和10%的可用内存!我在Linode为一台96 GB、20个CPU核心的服务器每小时支付大约1.50美元,因此我认为最好使用100%的可用CPU 我知道这在很大程度上取决于算法,但请检查下面的代码。这是

我在Centos 7上使用PHP和Apache 2.4来运行一个非常CPU密集的概率模型。我花了8天时间在家里的电脑上运行它,所以我决定把它转移到云服务中。所以我配置了它,现在只需要5个小时。太好了

但是有一个问题,在处理算法时,我检查了云上的free和top命令,它报告说使用了大约24%的CPU和10%的可用内存!我在Linode为一台96 GB、20个CPU核心的服务器每小时支付大约1.50美元,因此我认为最好使用100%的可用CPU

我知道这在很大程度上取决于算法,但请检查下面的代码。这是一个非常繁重的CPU密集型算法,它应该使用100%的CPU,但不是,根据top,它只使用了24%

<?php

set_time_limit(0);
ini_set("memory_limit","-1");

for ($i=0;$i<10000;$i++) {

    for ($ii=0;$ii<10000;$ii++) {

        for ($iii=0;$iii<10000;$iii++) {

            for ($iiii=0;$iiii<10000;$iiii++) {



            }

        }

    }

}

?>

那么,到底发生了什么?如何让我的Apache使用更多的CPU和内存?

您正在PHP中运行一个高度CPU密集型的算法?我不确定这是不是一个好主意

在任何情况下,我认为这里的问题是,您的代码运行在一个四核处理器上,但仅在一个线程中。因此,您目前可以实现的最大CPU使用率是25%


我建议你把你的软件改写为多线程的应用程序,最好是使用C语言或C++语言。您很可能在等待系统的其他部分赶上—例如,等待磁盘,或等待分配内存,等等。所有这些都不适用于PHP,因为它是操作系统内核内部的东西。我敢打赌,它是在一个非常大的数组或其他数据块上运行的,这些数据块在内存中交换。如果是这样,您可以通过添加更多内存来获得更好的性能。一个更复杂的解决方案是在内存中分块处理数据。嗨,我在内部循环中什么都不做,这个例子只是告诉你如何模拟这个问题。我100%确信,如果您在云服务或apache+php上运行上述代码,您将不会看到您的CPU超过24%,因为apache同样奇怪,不允许使用更多CPU。您可能是与我遇到的问题非常接近的人!是的,的确,也许我的代码是在四核上运行的,但linode说是20核。无论如何,如果它运行在四核上,你说的是非常正确的!但是请看:如果我执行我在浏览器的一个选项卡中发布的示例代码,同时在另一个选项卡中执行它。Apache应该使用2个内核来实现这一点,对吗?但我仍然看到24%的cpu使用率。为什么?好问题。答案可能是因为仍然只有一个PHP应用程序处理这些请求。显然,有一个名为的PHP扩展为它提供了多线程功能,但如果我是你,我会放弃PHP,开始用C语言编写代码。Apache在所有这些方面的参与非常少,但对的回答可能会给你一些有用的见解。