Добро пожаловать на форум http://pogovorim.chudoforum.ru/
Пожалуйста войдите или зарегистрируйтесь

Join the forum, it's quick and easy

Добро пожаловать на форум http://pogovorim.chudoforum.ru/
Пожалуйста войдите или зарегистрируйтесь
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск

Вход

Забыли пароль?

Сентябрь 2024
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30      

Календарь Календарь

Полезный совет
Найди свою любовь
Я ищу
в возрасте от до
город
знакомства

Загрузка...

php: тормоза при чтении/записи файлов

Участников: 4

Перейти вниз

php: тормоза при чтении/записи файлов Empty php: тормоза при чтении/записи файлов

Сообщение автор v-met Пт 26 Дек 2008 - 3:21

новый хостинг, вылезли странные глюки.
Если в скрипте идет чтение/запись файлов - начинаются страшные тормоза, тестовый скрипт который читает/пишет 100 маленьких временных файлов исполняется 10-20 секунд.

Статические странички, чтение/запись mysql - все прекрасно.

В какую сторону копать - непонятно...
v-met
v-met

Количество сообщений : 10
Дата регистрации : 2008-12-13

Вернуться к началу Перейти вниз

php: тормоза при чтении/записи файлов Empty Re: php: тормоза при чтении/записи файлов

Сообщение автор Ra1akr Пт 26 Дек 2008 - 3:22

тестовый скрипт который читает/пишет 100 маленьких временных файлов исполняется 10-20 секунд.

Пример скрипта?
Ra1akr
Ra1akr

Мужчина
Количество сообщений : 9
Дата регистрации : 2008-12-13

Вернуться к началу Перейти вниз

php: тормоза при чтении/записи файлов Empty Re: php: тормоза при чтении/записи файлов

Сообщение автор v-met Пт 26 Дек 2008 - 3:23


header("Expires: Tue, 1 Jul 2003 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");

@include_once('../config.php');

function test_read_write(){
$skipped_files = array('.', '..', 'index.html', 'index.htm', '.htaccess');
$path = CACHE_PATH;
clearstatcache();

$output = '<ul>';
$files = array();
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if (in_array($file, $skipped_files)) {
continue;
} else if (is_file($path.$file) ) {
$tmp = file_get_contents($path.$file);
$output .= '<li>'.md5_file($path.$file).' / '.crc32($tmp).' / '.$file.'</li>';
$files[] = $path.$file;
if (count($files)>199){
break;
}
}
}
closedir($handle);
} else {
trigger_error("Error opening $path");
}
$output .= '</ul>';
return $output;
}

echo Date('Y-m-d H:i:s');
echo test_read_write();
echo Date('Y-m-d H:i:s');
если на страницу с этим скриптом натравить host-tracker, то среднее время ответа получается 30-40с
v-met
v-met

Количество сообщений : 10
Дата регистрации : 2008-12-13

Вернуться к началу Перейти вниз

php: тормоза при чтении/записи файлов Empty Re: php: тормоза при чтении/записи файлов

Сообщение автор ravil Пт 26 Дек 2008 - 3:25

1. in_array в 60 раз медленнее array_key_exists. Преобразуй массив исключений $skipped_files для перехода на array_key_exists (значения становятся ключами).
2. 200 раз в цикле считать размер массива собранных файлов - типичный нюбский (извини ) прием. Да и я не обнаружил использования этого массива впоследствии, что есть нонсенс. Сделай итератор, инкрементируй его в цикле и проверяй его значение на предмет достижения 200.
3. Ты дважды смыкаешь файл на чтение: а) в file_get_contents, б) в md5_file. Смысл пункта б), если ты строкой выше УЖЕ получил контент файла. Вместо md5_file используй md5
4. Ты 4 раза делаешь одинаковую конкатенцию $path.$file Мелочь, но все-таки. Да, и если уж так не хочеться выносить в отдельную переменную, я бы рекомендовал преобразовать в "{$path}{$file}"

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

Мужчина
Количество сообщений : 14
Дата регистрации : 2008-12-13

Вернуться к началу Перейти вниз

php: тормоза при чтении/записи файлов Empty Re: php: тормоза при чтении/записи файлов

Сообщение автор v-met Пт 26 Дек 2008 - 3:26

перечитай тему, это тестовый скрипт, чтобы тестировать чтение/запись файлов посредством php. Тормоза - за рамками php, скрипт только для того чтобы выявить какие-именно операции тормозят.
v-met
v-met

Количество сообщений : 10
Дата регистрации : 2008-12-13

Вернуться к началу Перейти вниз

php: тормоза при чтении/записи файлов Empty Re: php: тормоза при чтении/записи файлов

Сообщение автор Ra1akr Пт 26 Дек 2008 - 3:27

Тормоза - за рамками php, скрипт только для того чтобы выявить какие-именно операции тормозят.

то есть ЕГО же запускали на другой системе? сколько файлов в перебираемой директории?
Ra1akr
Ra1akr

Мужчина
Количество сообщений : 9
Дата регистрации : 2008-12-13

Вернуться к началу Перейти вниз

php: тормоза при чтении/записи файлов Empty Re: php: тормоза при чтении/записи файлов

Сообщение автор Mbravo Пт 26 Дек 2008 - 3:29

in_array в 60 раз медленнее array_key_exists

Интересная мысль. Конечно, рациональное зерно в этом есть, но не более. Кратность сильно зависит от размерности хешей.

Думаю стоит замерять время, затрачиваемое на каждый блок программы, что-то вроде:


$dt = 0;
.....
while(...){
....
$t1 = microtime(true);
$output .= '<li>'.md5_file($path.$file).' / '.crc32($tmp).' / '.$file.'</li>';
$t2 = microtime(true);
$dt += $t2-$t1;
....
}
echo $dt;

На мой взгляд, самые подозрительные места - file_get_contents, md5_file, crc32 и readdir.
Mbravo
Mbravo

Женщина
Количество сообщений : 8
Дата регистрации : 2008-12-13

Вернуться к началу Перейти вниз

php: тормоза при чтении/записи файлов Empty Re: php: тормоза при чтении/записи файлов

Сообщение автор v-met Пт 26 Дек 2008 - 3:31

то есть ЕГО же запускали на другой системе?

да, и время выполнения ~1-2с, тогда как на тестовой, при натравливании на скрипт host-tracker, время ответа доходит до 30-40 секунд.
количество файлов - до 1000, существенного влияния от количества файлов не замечено.

если модератор не против, тему стоит перенести или в хостинг или к сис-админам, так как проблема скорее всего, где то за рамками php, в настройках и ограничениях самой системы, но вот в каких именно - непонятно.
v-met
v-met

Количество сообщений : 10
Дата регистрации : 2008-12-13

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения