Задать вопрос

На новом сервере тормозят функции glob, readdir и др?

Перенес большой блог со старого сервера на новый. Клиент пожаловался, что стал сильно тормозить редактор Tiny MCE, а точнее TinyBrowser (файловый менеджер). Стал разбираться и выяснил, что тормозит функция построения дерева папок dirtree.

На старом сервере функция выполняется около 50 ms, на новом почти 10 секунд (медленнее в 200 раз). Похоже, тормозят функции glob и readdir. Каталоги идентичны: 3000 папок, 80 тысяч файлов. При этом в момент выполнения функции загрузка процессора 100%, загрузка диска 0% (смотрел через atop). В чем может быть дело?


Старый сервер:

2 x Intel Xeon 5650, 16 GB RAM, 4 SAS диска в аппаратном RAID-10, файловая система Ext3, Debian


Новый сервер:

2 x Intel Quad Core Xeon L5410, 16 GB RAM, 4 SAS диска в аппаратном RAID-10, файловая система Ext4, CentOS 6


Функция dirtree:
function dirtree(&$alldirs, $root = '', $tree = '', $branch = '', $level = 0)
{
  if ($level == 0 && is_dir($root . $tree . $branch))
  {
    $filenum = count(glob($root . $tree . $branch . '*.*', GLOB_NOSORT));
    $topname = end(explode('/', rtrim($tree, '/')));
    $alldirs[] = array($branch, rtrim($topname, '/') . ' (' . $filenum . ')', rtrim($topname, '/'), rtrim($topname, '/'), $filenum, filemtime($root . $tree . $branch));
  }
  $level++;

  $dh = opendir($root . $tree . $branch);
  while (($dirname = readdir($dh)) !== false)
  {
    if (substr($dirname, 0, 1) != '.' && is_dir($root . $tree . $branch . $dirname) && $dirname != '_thumbs')
    {
      $filenum = count(glob($root . $tree . $branch . $dirname . '/' . '*.*', GLOB_NOSORT));
      $indent = '';
      for ($i = 0; $i < $level; $i++)
      {
        $indent .= '   ';
      }
      if (strlen($indent) > 0) $indent .= '→ ';
      $alldirs[] = array(urlencode($branch . $dirname . '/'), $indent . $dirname . ' (' . $filenum . ')', $indent . $dirname, $dirname, $filenum, filemtime($root . $tree . $branch . $dirname));
      dirtree($alldirs, $root, $tree, $branch . $dirname . '/', $level);
    }
  }
  closedir($dh);
  $level--;
}



Mount:
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext2 (rw)
/dev/sda4 on /tmp type ext4 (rw,noexec,nosuid,nodev)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/etc/named on /var/named/chroot/etc/named type none (rw,bind)
/var/named on /var/named/chroot/var/named type none (rw,bind)
/etc/named.rfc1912.zones on /var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
/etc/rndc.key on /var/named/chroot/etc/rndc.key type none (rw,bind)
/usr/lib64/bind on /var/named/chroot/usr/lib64/bind type none (rw,bind)
/etc/named.iscdlv.key on /var/named/chroot/etc/named.iscdlv.key type none (rw,bind)
/etc/named.root.key on /var/named/chroot/etc/named.root.key type none (rw,bind)


dmesg: pastebin.com/eZpGvnva
  • Вопрос задан
  • 3207 просмотров
Подписаться 3 Оценить 3 комментария
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@Hint Автор вопроса
Оказалось, что проблема была в Plesk Panel. Ставлю ОС — все нормально, ставлю Plesk — дисковые операции начинают тормозить.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
Покажите вывод mount и dmesg
Ответ написан
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
iowait, iostat что пишут на обоих машинах?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽