На новом сервере тормозят функции 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
  • Вопрос задан
  • 3204 просмотра
Решения вопроса 1
@Hint Автор вопроса
Оказалось, что проблема была в Plesk Panel. Ставлю ОС — все нормально, ставлю Plesk — дисковые операции начинают тормозить.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
Покажите вывод mount и dmesg
Ответ написан
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
iowait, iostat что пишут на обоих машинах?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы