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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
от 300 000 до 500 000 ₽
07 мая 2024, в 18:23
20000 руб./за проект
07 мая 2024, в 18:09
2000 руб./за проект
07 мая 2024, в 17:40
300 руб./за проект