我在Centos 7上使用PHP和Apache 2.4來運行非常CPU密集的概率模型。我花了8天的時間在家用電腦上運行它,因此我決定將它轉移到雲服務中。所以我配置了它,現在只需要5個小時。大!如何爲Apache提供更多內存
但是有一個問題,在處理算法時,我檢查了雲上的「自由」和「頂部」命令,它報告使用了我的CPU的24%和可用內存的10%!我以每小時1.50美元的價格向Linode的服務器支付96 GB和20個CPU核心,所以我最好使用100%的可用CPU。
我知道它取決於算法上的一個點,但請檢查下面的代碼。這是一個非常沉重的CPU密集型算法,它應該使用100%的CPU但不使用,它只使用24%(根據「top」)。
<?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,因爲它是操作系統內核的核心內容,它將會持續不斷。 –
我敢打賭,它正在一個非常大的數組(或其他數據塊)上進行操作,這些數據正在被換入和退出內存。如果是這樣的話,可以通過增加更多的內存來獲得更好的性能。更復雜的解決方案是以適合內存的塊來處理數據。 –
嗨,我沒有做任何內部循環內,這個例子只是爲了告訴你如何模擬這個問題。我100%確定,如果你在雲服務或者你的apache + php上運行上面的代碼,你不會看到你的CPU超過24%,因爲apache的怪異點不允許更多的cpu。 –