php监控以提高性能

时间:2013-12-03 20:27:55

标签: php apache mongodb nginx

我制作了一个原始的PHP脚本,只是为了测试查询我的数据库的性能。

这只是在所有集合的所有文档中构建一个循环。

 <?php

    $m = new Mongo("mongodb://user:pass@serer:27017/db");
    $db = $m->dbname;

    $users       = $db->users->find();        <=== 300k docs, 1 index
    $machines    = $db->machines->find();     <=== 350k docs, 1 index
    $chars       = $db->characters->find();   <=== 10k  docs, 2 indexes
    $stats    = $db->stats->find();        <=== 10k  docs, 1 index

    $allinfos = array();

    foreach ($users as $k => $v) {  array_push($allinfos, array('item'=>1)); }
    foreach ($machines as $k => $v){ array_push($allinfos, array('item'=>1)); }
    foreach ($chars as $k => $v) {  array_push($allinfos, array('item'=>1)); }
    foreach ($stats as $k => $v) {  array_push($allinfos, array('item'=>1)); }

    print count($allinfos);

 ?>

在我的本地Apache中,脚本花了2分钟完成处理,但是有效。

在此过程中:

  • 数据库服务器RAM max comsuption: 7%。 (服务器有8GB RAM,80GB SSD)
  • 数据库服务器CPU最大消耗: 3%
  • Localhost HTTPD进程RAM max comsuption: 70mb

我做的调整:在php.ini中将memory_limit更改为 1048M

-

  1. 如何调整性能?
  2. 为什么不使用更多的CPU和RAM来更快地处理?
  3. 将apache更改为nginx?

1 个答案:

答案 0 :(得分:2)

这是一个如此广泛的问题,除了询问你的瓶颈在哪里之外,很难知道从哪里开始?您可以像这样描述您的脚本:

<?php

    $start = microtime(true);
    $m = new Mongo("mongodb://user:pass@serer:27017/db");
    $db = $m->dbname;
    echo (microtime(true) - $start).' : Connected to server<br><br>';

    $start = microtime(true);
    $users       = $db->users->find();        // <=== 300k docs, 1 index
    echo (microtime(true) - $start).' : Users query ('.count($users).')<br><br>';

    $start = microtime(true);
    $machines    = $db->machines->find();     // <=== 350k docs, 1 index
    echo (microtime(true) - $start).' : Machines query ('.count($machines).')<br><br>';

    $start = microtime(true);
    $chars       = $db->characters->find();   // <=== 10k  docs, 2 indexes
    echo (microtime(true) - $start).' : Chars query ('.count($chars).')<br><br>';

    $start = microtime(true);
    $stats    = $db->stats->find();           // <=== 10k  docs, 1 index
    echo (microtime(true) - $start).' : Stats query ('.count($stats).')<br><br>';

?>