Какво мога да направя, за да подобря скоростта на четене на файлове на IIS PHP сървър?

Срещнах конфигурация на PHP сървър на WINDOWS IIS6 и от моите тестове скоростта на четене на файла е наистина лоша.

Получавам скорости на четене за файл под 300 000 байта от 0,89 секунди до 1,8 секунди. Сравнете това с настройка на Linux сървър, където същият код връща скорости от 0,017752170562744 секунди

Тествах и с readfile, и с fopen.

Има ли нещо, което трябва да погледна или да настроя в конфигурацията на php или конфигурацията на сървъра, така че скоростта на четене да е приемлива.

Ето кода, който използвам за тестване

//updated
$file = '../assets/cache/siteCache.idx.php';

$time_start = microtime(true);
readfile($file);
$time_end = microtime(true);

$time2 = $time_end - $time_start;
echo $file . ': ' . filesize($file) . ' bytes' . '<hr />';
echo "Time to read with readfile: $time_end - $time_start = $time2 seconds<hr />";

$time_start = microtime(true);
$handle = fopen($file, "r");
fclose($handle);
$time_end = microtime(true);

$time1 = $time_end - $time_start;
echo $file . ': ' . filesize($file) . ' bytes' . '<hr />';
echo "Time to read with fopen: $time_end - $time_start = $time1 seconds<hr />";

person orbitory    schedule 02.01.2014    source източник
comment
Как четете файла тогава? Как изглежда вашият код?   -  person Mark Baker    schedule 02.01.2014
comment
Ето кода, който използвам за тестване pastebin.com/Fe25HY2Q. CMS, който използвам, работи малко по-различно, но кодът е приблизително същият   -  person orbitory    schedule 02.01.2014
comment
Поставете кода си във въпроса (използвайте връзката за редактиране), малко членове тук ще посетят извън сайта, за да го прочетат   -  person Mark Baker    schedule 02.01.2014
comment
@orbitory пробвал ли си да използваш file_get_contents вместо readfile? тъй като това използва техники за картографиране на паметта, ако са налични във вашата операционна система, за да се опита да помогне за увеличаване на производителността?   -  person Liam Sorsby    schedule 07.01.2014
comment
Освен това бавните резултати само през IIS ли са или и през CLI? Това може да стесни къде се крие проблемът ви... Ако беше бързо в CLI режим, можете почти да изключите проблеми, свързани с Windows, и да се съсредоточите върху IIS.   -  person Tasos Bitsios    schedule 07.01.2014
comment
Вторият изход на $time е безполезен, вие не актуализирате стойността и следователно виждате същата стойност като на readfile(). Също така readfile() също извежда съдържанието на файла, което *може да предизвика допълнително използване на процесора, което може да маскира високо/по-ниско време за четене.   -  person Stijn van Grinsven    schedule 09.01.2014
comment
@StijnvanGrinsven: Благодаря, че забеляза проблема. Актуализирах кода по-горе. Ще тества възможно най-скоро   -  person orbitory    schedule 09.01.2014
comment
Допълнителна забележка: сравняването на readfile() с fopen/fclose не е справедлив процес: fopen() ви дава само манипулатор и не включва действително четене на файла. използвайте и fread(), за да го направите като readfile()   -  person Stijn van Grinsven    schedule 09.01.2014
comment
@StijnvanGrinsven: ще свърши работа, трябва да намеря какво точно използва CMS, който тествам.   -  person orbitory    schedule 10.01.2014
comment
Пробвал ли си линукс и уиндоус на същия хардуер или е виртуално? Винаги може да се окаже, че вашата Windows машина има ужасен хардуер/драйвери :P (тествайте, като монтирате нещо в RAM, ако можете)   -  person Anyone    schedule 12.01.2014
comment
Възможно е това да не е скоростта на четене, а скоростта на извеждане. В момента разглеждам това.   -  person orbitory    schedule 13.01.2014
comment
@StijnvanGrinsven - мога ли да разделя точките за репутация? Ти ми помогна да ме насочиш в правилната посока. Thx отново   -  person orbitory    schedule 13.01.2014
comment
Оставете точките за мен. Въпреки че ви карам да се доближите до решението/ отговор, не отговорих нищо :)   -  person Stijn van Grinsven    schedule 14.01.2014


Отговори (2)


Може да имате по-добър напредък, като гледате физическия диск, отколкото софтуерния API, който използвате.

По-старите или по-евтини твърди дискове вероятно ще имат по-бавно време за търсене и по-малка производителност. Може да е много по-малко работа да инсталирате бърз, SSD твърд диск и да преместите вашето приложение на това устройство и да осигурите по-голяма печалба за вашите пари.

Ако това не е опция, може би е по-добре да използвате самия IIS, за да обслужва вашите статични файлове, използвайки нещо като X-Sendfile:

https://github.com/stakach/IIS-X-Sendfile-plugin

person Winfield    schedule 13.01.2014
comment
Thx, ще разгледам това или ще помоля администратора да го инсталира. В момента разглеждаме изходната скорост. Първоначалният ми тестов код беше дефектен. Скоростта на четене изглежда добра. - person orbitory; 14.01.2014

Друг вариант може да бъде инсталирането на opcache като APC, който също е наличен в Windows.

Това ще намали четенията от FS, защото файлът се съхранява в паметта (когато е инсталиран правилно).

Второ, бихте могли да съхранявате вашия CMS на ramdisk, така че целият код да бъде в паметта и времето за достъп за всеки файл ще бъде сведено до минимум.

person Flask    schedule 13.01.2014