Работает со всеми версиями ПХП: от 4.4 до 7.1
Необходимы модули для php:
- pcre
- hash
- mbstring
- json
Обычно они уже установлены или "вкомпилированны" в php.
Проверить наличие:
- в консоли
php -m
- или через вывод функции
phpinfo()
Команда:
php bench.php [-h|--help] [-m|--memory-limit=256] [-t|--time-limit=600]
-h|--help - вывод помощи и выход
-m|--memory-limit <Mb> - установка значения параметра `memory_limit` в Мб, по-умолчанию равно 256 (Мб)
-t|--time-limit <sec> - установка значения параметра `max_execution_time` в секундах, по-умолчанию равно 600 (сек.)
Например: php bench.php -m=64 -t=30
Второй вариант передачи значений для параметров - переменные окружения:
env PHP_MEMORY_LIMIT=64 PHP_TIME_LIMIT=30 php bench.php
Просто положите в любую доступную для выполнения php директорию сайта, например в корень.
Потом скрипт можно будет вызывать с параметрами, как из консоли:
curl https://www.example.com/bench.php?memory_limit=64&time_limit=30
или через браузер.
На многих хостингах параметры memory_limit
и max_execution_time
могут быть жестко зафиксированы.
В этом случа скрипт не сможет установить переданные в него значения параметров, по крайней мере не выше лимитов.
Пересчет времени выполнения скрипта будет произведен по наименьшим результирующим значениям.
@ 2017-05-19, v1.0.21
- Добавили тесты производительности конвертации простых типов:
string => (int)
,string => intval()
@ 2017-05-19, v1.0.20
- Поддержва длинных опций ком.строки только в php-5.3+
- Добавили проверку форматирования строк - производительность сбора
''
строки с числами, или""
строки с форматированием чисел внутри. - Очищаем данные после теста строк, массивов - меньше занятой памяти
@ 2017-05-19, v1.0.19
- Попытка принудительно включить небуферизированный вывод
- Спец-заголовок для nginx для отключения буферизации
- Возможность загрузить основные тесты без файла php5.inc с тестом try/Exception/catch
@ 2017-05-18, v1.0.18
- Проверка на совместимую версию php
- Получение значений для настроек php -
max_execution_time
иmemory_limit
- из GET / getenv / getopt.
@ 2017-05-18, v1.0.17
- Попытка укладываться в max_execution_time Т.к. зависимость от hardware не линейная - много hack-ов. Может не всегда срабатывать.
@ 2017-05-18, v1.0.16
- Сделали поиск доступных алгоритмов хеширования для crypt()
- По-умолчанию считаем, что доступен для всех MD5
@ 2017-05-17, v1.0.15
- Поправили работу скрипта с php-7.x - больше ограничений по памяти
- Добавили вывод используемой памяти (@ryr)
@ 2017-05-06, v1.0.14
- Изменили работу скрипта, если доступно памяти менее 256Мб
@ 2017-05-06, v1.0.13
- Поправили немного code-style (@ryr)
- Добавили больше данных в тесты сериализации
@ 2017-04-21, v1.0.12
- Правильная конвертация значений в единицы SI.
- Считаем операции в секунду на МГц.
- Обновил вывод - добавил заголовок столбцам
@ 2017-04-20, v1.0.11
- Нагружаем процессор, чтобы определить MHz только если разница между значениями 'cpu MHz' и 'bogomips/2' большая.
@ 2017-04-20, v1.0.10
- Тесты массивов теперь всегда включены, они больше не съедают много памяти
- Добавлено определение CPU на Linux-системах, добавлен вывод операций на МГц
- В выводе uname осталена только необходимая для сравнения информация
- Обновлен README
@ 2017-04-06, v1.0.9
- Поправлен подсчет операций в секунду для теста массивов
@ 2017-04-06, v1.0.8
- Тесты, которых нет в php-4.4 вынесены в отдельный подключаемый файл
@ 2017-04-06, v1.0.7
- Изменены названия функций-тестов для сортировки перед запуском
- Обновлено форматирование вывода результатов тестов
- Добавлены и обновлены тесты:
- образение к определенныи и неопределенным переменным/ключам массива
- исключения (exceptions)
- к хешированию добавлен тест crypt
- тест массивов разбит на три уровня - время выполнения то же, памяти занимает меньше
@ 2015-07-16, v1.0.6
- Добавлены тесты: preg & serialize
@ 2015-07-02, v1.0.5
- Добавлен тест простейшего копирования строк
@ 2015-07-02, v1.0.4
- Добавлено увеличение лимита по памяти и времени выполнения
@ 2015-07-02, v1.0.3
- Исправлено определение доступных функций, сделан пропуск тестов для них
@ 2015-07-02, v1.0.2
- Добавлено еще больше функций, теперь требуется наличие mbstring и json модулей
- Потребление памяти увеличено из-за тестирования массивов - нужно более 1Гб
@ 2015-07-01, v1.0.1
- Добавлен вывод потребления памяти
- Добавлены новые функции, увеличен размер проверочной строки
<pre>
-------------------------------------------------------------------------------------------
| PHP BENCHMARK SCRIPT |
-------------------------------------------------------------------------------------------
Start: : 2017-05-24 22:48:12
Server: : Linux/4.4.0-79-generic x86_64
Platform: : Linux
CPU: :
model : Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz
cores : 4
MHz : 3757.578MHz
Memory : 256 Mb available
Benchmark version: : 1.0.21
PHP version: : 7.0.14-Ubuntu/16.04-SergeyD/9.3.1
Max execution time: : 600 sec.
Crypt hash algo: : MD5
-------------------------------------------------------------------------------------------
TEST NAME : SECONDS | OP/SEC | OP/SEC/MHz | MEMORY
-------------------------------------------------------------------------------------------
01_math : 3.134 sec | 446.66 kOp/s | 118.87 Ops/MHz | 2 Mb
02_string_concat : 0.232 sec | 33.16 MOp/s | 8.82 kOps/MHz | 4 Mb
03_1_string_number_concat : 1.717 sec | 2.91 MOp/s | 774.94 Ops/MHz | 4 Mb
03_2_string_number_format : 1.500 sec | 3.33 MOp/s | 887.36 Ops/MHz | 4 Mb
04_string_simple_functions : 1.771 sec | 734.20 kOp/s | 195.39 Ops/MHz | 4 Mb
05_string_multibyte : 4.084 sec | 31.83 kOp/s | 8.47 Ops/MHz | 4 Mb
06_string_manipulation : 2.442 sec | 532.32 kOp/s | 141.67 Ops/MHz | 4 Mb
07_regex : 1.956 sec | 664.78 kOp/s | 176.92 Ops/MHz | 4 Mb
08_1_hashing : 2.023 sec | 642.55 kOp/s | 171.00 Ops/MHz | 4 Mb
08_2_crypt : 5.928 sec | 1.69 kOp/s | 0.45 Ops/MHz | 4 Mb
09_json_encode : 1.638 sec | 793.71 kOp/s | 211.23 Ops/MHz | 4 Mb
10_json_decode : 1.992 sec | 652.76 kOp/s | 173.72 Ops/MHz | 4 Mb
11_serialize : 1.223 sec | 1.06 MOp/s | 282.81 Ops/MHz | 4 Mb
12_unserialize : 1.749 sec | 743.36 kOp/s | 197.83 Ops/MHz | 4 Mb
13_array_fill : 2.008 sec | 23.91 MOp/s | 6.36 kOps/MHz | 4 Mb
14_array_unset : 1.815 sec | 26.45 MOp/s | 7.04 kOps/MHz | 4 Mb
15_loops : 2.011 sec | 188.95 MOp/s | 50.29 kOps/MHz | 4 Mb
16_loop_ifelse : 1.492 sec | 60.34 MOp/s | 16.06 kOps/MHz | 4 Mb
17_loop_ternary : 3.280 sec | 27.44 MOp/s | 7.30 kOps/MHz | 4 Mb
18_1_loop_defined_access : 0.590 sec | 33.92 MOp/s | 9.03 kOps/MHz | 4 Mb
18_2_loop_undefined_access : 3.843 sec | 5.20 MOp/s | 1.39 kOps/MHz | 4 Mb
19_type_functions : 1.749 sec | 2.86 MOp/s | 760.87 Ops/MHz | 4 Mb
20_type_conversion : 1.169 sec | 4.28 MOp/s | 1.14 kOps/MHz | 4 Mb
21_loop_exceptiontrycatch : 2.139 sec | 1.87 MOp/s | 497.63 Ops/MHz | 4 Mb
-------------------------------------------------------------------------------------------
Total time: : 51.484 sec.
Current memory usage: : 535.71 kb.
Peak memory usage: : 125.36 Mb.
</pre>