Какие настройки Apache / PHP / Server могут повлиять на скорость создания экземпляров модели CodeIgniter с одного сервера на другой? - PullRequest
1 голос
/ 25 августа 2010

Одна из страниц в одном из моих приложений работает очень медленно на веб-сервере по сравнению с моим локальным тестовым сервером.Существуют некоторые радикальные различия в средах, которые могут это объяснить, но я надеюсь на более решаемое решение, чем это.

Сервер:
Solaris 10
Apache 2.2.9 Prefork
PHP 5.2.6
Сервер запущен в кластере из 4-х блоков Sun, которым нет даже года, и не должен иметь проблем с производительностью.

Локальный тестовый сервер:
Windows XP
Apache 2.2.14 WinNT
PHP 5.3.1
На самом деле это мой собственный рабочий стол - приличная машина, но должна бледнеть по сравнению с блоками Sun.

Приложение написано с использованием CodeIgniter, и я использовал функции профилирования, чтобы отследить замедление до Model :: Model ().Например, Model :: Model () запускается в 0,0006 с локально и 0,0045 с на сервере.Когда вы загружаете сотни моделей на страницу, это, очевидно, проблема.

Я добавил это здесь из ServerFault, так как он может быть более тесно связан с CodeIgniter.

С локальной страницы загрузка занимает 2-3 секунды.С сервера это 11-15.

Модули на локальном, но не удаленном:

  • mod_actions
  • mod_asis
  • mod_dav mod_dav_fs
  • mod_dav_lock
  • mod_isapi mod_autoindex_color

Модули на удаленном, а не локальном:

  • mod_authn_dbm
  • mod_authn_anon
  • mod_authz_dbm
  • mod_authz_owner
  • mod_cache
  • mod_mem_cache
  • mod_deflate
  • mod_authnz_ldap
  • 1055
  • * mod_mime_magic
  • mod_expires
  • mod_unique_id
  • mod_autoindex
  • mod_suexec
  • mod_userdir
  • libphp5
  • 1069mod_dtrace
  • mod_security2

Редактировать:

Я постепенно сдвигал свой бенчмаркинг, уровень за уровнем иобнаружил, что наибольшее расхождение лежит в этом фрагменте кода (который находится в функции CodeIgniter Model :: _ assign_libraries и называетсяво время конструктора модели):

    $time = microtime()*1000;
    foreach (array_keys(get_object_vars($CI)) as $key)
    {
        if ( ! isset($this->$key) AND $key != $this->_parent_name)
        {
            // In some cases using references can cause
            // problems so we'll conditionally use them
            if ($use_reference == TRUE)
            {
                $this->$key = NULL; // Needed to prevent reference errors with some configurations
                $this->$key =& $CI->$key;
            }
            else
            {
                $this->$key = $CI->$key;
            }
        }
    }
    if (get_class($this) == 'SeatType')
        echo sprintf('%.5f ms|', (microtime()*1000 - $time));

Локально, это печатает около 0,48 мс за каждую итерацию.В кластере он печатает около 3,9 мс за каждую итерацию.

Я начинаю задумываться, не связана ли эта проблема с Apache / PHP - я скопировал файлы php.ini и htconf на свой локальный сервер, и(после удаления mod_dtrace и практически ничего другого) я действительно увидел увеличение производительности.(Приведенная выше проверка теперь печатает .2ms локально.)

1 Ответ

0 голосов
/ 27 августа 2010

Мы обнаружили, что, хотя серверы SPARC выглядят так, как будто они должны работать лучше, чем ядро ​​core2 на моем ПК, они делают это полностью благодаря многопоточности.Любой отдельный поток на самом деле будет работать хуже.Вероятно, это связано с падением производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...