2015-05-19 70 views
0

我在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和內存?

+0

你在做什麼內循環?您可能正在等待系統的其他部分趕上 - 例如等待磁盤,或等待內存分配,等等等等等等。這些都不會對付PHP,因爲它是操作系統內核的核心內容,它將會持續不斷。 –

+0

我敢打賭,它正在一個非常大的數組(或其他數據塊)上進行操作,這些數據正在被換入和退出內存。如果是這樣的話,可以通過增加更多的內存來獲得更好的性能。更復雜的解決方案是以適合內存的塊來處理數據。 –

+0

嗨,我沒有做任何內部循環內,這個例子只是爲了告訴你如何模擬這個問題。我100%確定,如果你在雲服務或者你的apache + php上運行上面的代碼,你不會看到你的CPU超過24%,因爲apache的怪異點不允許更多的cpu。 –

回答

0

你正在PHP中運行一個高CPU密集型算法?我不確定這是個好主意。

在任何情況下,我認爲這裏的問題是您的代碼運行在四核處理器上,但只能在單個線程中運行。所以你目前可以達到的最大CPU使用率是25%。

我建議您將您的軟件重寫爲多線程應用程序,最好使用C或C++語言。

+0

你可能是非常接近我得到的問題的人!是的,的確,也許我的代碼運行在四核上,但linode說它是20核心。無論如何,如果它運行在四核上,你所說的是非常正確的!但看到這個:如果我執行我在瀏覽器的一個選項卡中發佈的示例代碼,並在另一個選項卡中同時執行它。 Apache應該使用2個內核來做對吧?但我仍然看到24%的CPU使用率。爲什麼? –

+0

好問題。答案可能是因爲仍然只有一個PHP應用程序處理這些請求。顯然,有一個名爲[pthreads](http://pthreads.org/)的PHP擴展,它提供了多線程功能,但如果我是你,我會拋棄PHP並開始編寫C中的某些東西。Apache參與所有這是相當小的,但[這個問題](http://stackoverflow.com/q/7116144/1679849)的答案可能會給你一些有用的見解。 –

+0

謝謝你對我有很好的幫助:) –