Скорость, nginx+php-fpm VS memcache

ig0ist

Новичок
Уважаемые гуру ,

Как вы думаете что тут не так :

PHP:
$a=111; for($f=0;$f<100;$f++)  {   include('class.10kb.code.php');   $a=$a+$f; }
Вы спросите, что это за бред, причём тут php-fpm и тем более memcache :)
Имеем VPS CentOSx64 , установлен nginx 0.8.52 ; php 5.3.5 ; php-fpm 5.3.5 ; eAccelerator 0.9.6.1 .
php-fpm через сокеты.

Делаю вроде тривиальный файлик tt.php на нормально нагруженной VPS:
PHP:
$s=microtime(true); // Замер php
    $a=111; for($f=0;$f<100;$f++)  {   include('class.10kb.code.php');   $a=$a+$f; }
$s=-$s+microtime(true);
$q=microtime(true); // Замер mem
    $_mem= new Memcache;
    $_mem->connect('unix:///tmp/memcached.socc', 0);
    $bb=$_mem->get("SOME_ARRAY_VAR");
$q=-$q+microtime(true);
echo " $s \t $q ";
Вызываем через сеть :

for ($f=0;$f<1260;$f++) $str=file_get_contents('http://hostin/tt.php);

И получаю интересные и не понятные для меня результаты :

Самые медленные : 22 из 1260
php:0.0492 сек
mem:0.0915 сек

Самые быстрые :
php:0.0020
mem:0.0002

Среднее :
php:0.0020545
mem:0.0002044

Я делаю вывод : что 0.0020сек для 100 include это норма
и что 0.0002сек можно успеть достучаться до memcache и достать что-то ....
Скорость падает не синхронно :
PHP:
№зап   INCLD        MEMCAC_GET

3       0.0023          0.0398
4       0.0022          0.0007
49      0.0053          0.0006
54      0.0368          0.0069
62      0.0128          0.0002
89      0.0105          0.0003
90      0.0371          0.0035
103     0.0052          0.0002
127     0.0492          0.0005
129     0.0363          0.0069

Вопрос : как вы думаете почему всё так просаживается, почти в 10 раз ?

Заметил что это не особо связанно с перезапуском php-fpm ....



Спасибо!
 

DiMA

php.spb.ru
Команда форума
0.0069 - не повод беспокоиться и писать тесты

и разумеется, старый пекл модуль memcache нужно выкинуть на помойку, есть модуль: $_mem=new Memcached;
 

zerkms

TDD infected
Команда форума
ig0ist
Дёрни тот же скрипт каким-нить ab -n 1000 -c 20 и сравни результаты с полученными выше.
 

DiMA

php.spb.ru
Команда форума
впервые об этом слышу
у всех пекл модули memcached патченные перепатченные, могут дать свои искажения по скорости
там в комментах опровергают тесты
мемкеш без cas - как процедурное программирование на бейсике вместо ооп на пхп, даже обсуждать нечего
 

fixxxer

К.О.
Партнер клуба
DiMA

"мемкеш без cas" - в pecl/memcache 3.0.x всё, что надо, есть. В документации только не написано, надо глядеть ридми-файлики в сорцах.
 

ig0ist

Новичок
Не думал что моя тема вызовет холивар ....
Как говориться слона то я и не заметил ...

Я окончательно запутался и перестаю понимать что происходит на vps , время выполнение одного и того же запроса меняется очень хаотично, делаем 100 запросов , через file_get_content(‘….’) замеряем время получаем среднее ~1.6сек , 10 за 3,3 сек , один за !!10!!секунд.
Вопрос как можно понять что происходило с nginx или php или еще с чем то, в эти 10 сек.
Я не представляю, с чем это может быть связанно.

Что посоветуете, куда рыть и какими средствами?



ps:
Что-то тестирование меня так заинтересовало,
решил поделиться со всеми результатами может кому-то будет интересно:
(Всё что ниже ИМХО!)
MemcachePool (1) vs Memcached (2) :
Делаем 1000 раз :
$_mem->get(rand(0,100));
$_mem->set(rand(0,100),$value);
Среднее время :
(1) 0,000557 - (2) 0,000606 = Одинаково

Memcache (1) vs Memcached (2) , только get(0...100) по 40 раз:
Время одн. get 0,027 , дельта ~0,005 в пользу MemcacheD :)

MemcachePool vs Memcached , только get(0...100) по 40 раз
тоже самое....

MemcachePool (1) vs Memcached (2) set 100 items array
При 1КБ массива (два ключа из строк)
Pool = за 0,029 на один set
MemD = 0,10604
Итог Pool в плюсе :)
дельта размер
-0,00518 1KB
-0,05137 7KB
-0,17008 16KB
-0,15812 19KB


MemcachePool (1) vs Memcached (2) - getMulti
Вытаскиваем сразу 10 элементов , каждый строка по 1КБ :
Pool: 0,000214 на один getMulti
MemD: 0,006555
Итог Pool тоже в плюсе :)
-0,00634 10itm
-0,02073 50itm
-0,06177 110itm
-0,08876 120itm
-0,11339 180itm
-0,10952 190itm


Вывод мой такой :
Одинаково:)
Для себя итог : использовать MemcachePool и getMulti()
 
Сверху