2012-12-22 45 views
1

我建立了一个网站,我用彗星与PHP。只要我做了一些研究并找到教程看起来很容易实现,对服务器也没有特别的要求,除了它会使用大量的资源。现在,我收到托管通知,我的脚本正在吃掉90%的CPU资源:(我把脚本关掉了,但我的问题是现在最好使用什么?我读了关于node.js的内容,但也读了他们会需要一些必要条件有关服务器的任何好,容易在这种情况下实施的解决方案php彗星:吃的CPU资源

那是要确定与VPS或专用服务器,如果让说,我有每天2000个用户在这个彗星脚本

编译的???

/*CLOSE THE SESSION WITH USER DATA*/ 
session_write_close(); 

// set time expire unlimited 
set_time_limit(0); 

$OldPostID  = isset($_REQUEST['OldPostID']) ? intval($_REQUEST['OldPostID']) : 0; 

$result_set_query_1 = $MClass->MyPostings($PageOwner); 

if (mysql_num_rows($result_set_query_1)) 
{ 
    $o = 0; 
    while ($r = @mysql_fetch_array($result_set_query_1)) 
    { 
     $PID = $r['PID']; 
    } 
} 

$NewPostID = $PID; 

while ($NewPostID <= $OldPostID)  
{ 
    usleep(10000); // sleep 10ms to unload the CPU 
    clearstatcache(); 

    $result_set_query_2 = $MClass->MyPostings($PageOwner); 

    if (mysql_num_rows($result_set_query_2)) 
    { 
     $o = 0; 
     while ($rs = @mysql_fetch_array($result_set_query_2)) 
     { 
      $PID = $rs['PID']; 
     } 
    } 

    $NewPostID = $PID; 
} 

// return a json array 
$result_set_posts = $MClass->GetAllMyPostings($PageOwner, $OldPostID, 0); 

} 

回答

1

彗星本身并没有使用大量的资源,除非被指示 - 它是剧本。如果你要在JavaScript中为Node.js服务器重写看似CPU密集的脚本,它很可能会以相同的方式执行。

将“推送”系统组合在一起通常包括设置一个云实例 - 例如,免费的Heroku--或者设置一个专用的/ VPS服务器来访问shell。

和Node.Js是一个较新的,虽然相对不成熟的实施“推”技术。为了让节点运行,你需要安装一个node.Js服务器。很少有主机安装准备就绪 - 但可以通过几个简单的shell命令轻松安装。

但从上述情况判断,很少有用户能够同时使用您的应用程序,因为它已经在只有一个用户的90%的CPU上运行。如果用户在每次会话中使用该应用程序一段时间,那么肯定每天有2000个用户是可行的,取决于多少人同时使用它以及何时使用它。也许。

+0

谢谢。我只是用我用于彗星的代码更新了问题。我用set_time_limit无限。我不确定这段代码是否有问题。谢谢 – 99Points

+0

@ 99分这很好 - 但它仍然没有说太多! CPU在哪里?它是MYSQL查询吗?查询是搜索索引还是探索性的?具有10行或1000万行的SQL数据库?不暴露胆量就很难说清楚。但是,请尝试下面的nanosleep想法,并尝试限制SQL结果,如果它是由于SQL。 – FredTheWebGuy

+0

而我只提到SQL是一种可能性,因为除了IO--它也直接与SQL使用相关,它是造成脚本速度下降的最主要原因。 – FredTheWebGuy

1

2000用户/日是一个小数字,除非典型的会话是1小时左右标准的PHP部署不能是你的sed在服务器推送场景中,因为每个请求都使用不同的进程处理。

如果您不想购买专用服务器,您可以尝试回退到重复轮询(如果假设延迟30秒是可以接受的)。但是,如果这确实有助于CPU的使用取决于您的实际导航模式,所以这只是一个尝试。

否则,如果您能买得起专用硬件,只需使用您更熟悉的语言即可。既然你命名为Node.js,我想你可以用Javascript编码,那么学习Node可能不是那么困难的任务。在Python(Twisted),Java,Scala以及你擅长的任何方面都有其他选择。只需选择语言,然后相应地选择框架。

0

通过在循环中运行服务器逻辑,PHP服务器脚本通常保持活动状态。 当我将运行24/7 CPU使用率的bcakground脚本的类似问题从超过90%降到低于1%时,我将time_nanosleep(0, 10000000);添加到循环的末尾。这不是万无一失的方法,但它对我很有用。