Senior System Administrator & LiveLinux.ru
0,0
рейтинг
14 августа 2015 в 17:33

Разработка → Сравнение скорости исполнения кода Drupal для PHP 5.3-5.6 и 7.0. «Битва оптимизаторов кода» apc vs xcache vs opcache

PHP*, Drupal*




В продолжение статьи:

Ускорение и оптимизация PHP-сайта. Какие технологии стоит выбирать при настройке сервера под PHP




В отличии от предыдущего материала, в этой статье сделан упор на сравнение скорости отклика и интерпретации кода для различных версий PHP, включая PHP 7 beta3.

Для ранних версий PHP, проведено тестирование между оптимизаторами кода apc, xcache и opcaсhe.
Эта статья не содержит тестов на производительность, таких как нагрузочные тесты ab и siege. Возможно, об этом я напишу в одной из следующих статей.
В данном случае, меня не интересует сколько страниц за секунду способна сгенерировать та или иная версия php-интерпретатора, скорее то, с какой скоростью она сгенерирует мне страницу и с какой задержкой.
В данном случае разница в том, что тесты производительности замеряют отношение скорости интерпретатора к общим ресурсам сервера, а так же подготовленности других связанных компонентов web-системы к работе на повышенных нагрузках.
Остановимся на скорости и отклике. Очевидно что производительность зависит от скорости, но высокая скорость не может гарантировать высокую производительность. Это, возможно, связанно с тем, что недостаточно хорошо настроен web-сервер или база данных, а также с какими-то не было ограничениями, например сетевого стека.
Что бы не заниматься попыткой объять необъятное, мы просто замерим скорость и отклик работы интерпретаторов php, на мощном сервере без нагрузки, с одинаковыми конфигурациями web-сервера, базы данных и операционной системы для всех испытуемых. Используем конфигурацию php-fpm + nginx. База данных MariaDB. Все технические детали скрыты под спойлером ниже.






Так же вы можете прочитать другие мои публикации на тему «Идеального» кластера






Технические детали и конфигурации
Испытуемый сервер:

CPU: Intel Xeon E5-1620v2 4c/8t 3,7 GHz+/3,9 GHz+
RAM: 64 GB DDR3 ECC 1600 MHz
Intel DC S3500 Series 300 Гб.





Centos 6.7:

Linux 2.6.32-40-pve #1 SMP Fri Jul 24 11:16:05 CEST 2015 x86_64 x86_64 x86_64 GNU/Linux





sysctl:

net.ipv4.ip_forward=1
kernel.sysrq=1
net.ipv4.tcp_syncookies=1
net.bridge.bridge-nf-call-ip6tables=0
net.bridge.bridge-nf-call-iptables=0
net.bridge.bridge-nf-call-arptables=0
kernel.msgmnb=65536
kernel.msgmax=65536
kernel.shmmax=4294967295
kernel.shmall=268435456
net.netfilter.nf_conntrack_max=99999999
fs.inotify.max_user_watches=99999999
net.ipv4.tcp_max_tw_buckets=99999999
net.ipv4.tcp_max_tw_buckets_ub=65535
net.ipv4.tcp_max_syn_backlog=65536
net.core.somaxconn=65535
fs.file-max=99999999
kernel.sem=1000 128000 128 512
vm.dirty_ratio=5
fs.aio-max-nr=262144
kernel.panic=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.send_redirects=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.ip_dynaddr=1
kernel.shmmni=4096
net.ipv4.tcp_keepalive_time=15
net.ipv4.tcp_keepalive_intvl=10
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_sack=0
net.ipv4.tcp_timestamps=0





PHP

PHP 5.3.29 (cli) (built: Aug 14 2014 14:15:02)
Copyright 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright 1998-2014 Zend Technologies

PHP 5.3.29 (cli) (built: Aug 14 2014 14:15:02)
Copyright 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright 1998-2014 Zend Technologies
with XCache v3.2.0, Copyright 2005-2014, by mOo
with XCache Cacher v3.2.0, Copyright 2005-2014, by mOo

PHP 5.3.29 (cli) (built: Aug 14 2014 14:15:02)
Copyright 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright 1998-2014 Zend Technologies
with Zend OPcache v7.0.5, Copyright 1999-2015, by Zend Technologies


The Zend Engine API version 220100525 which is installed, is newer.
Contact Zend Technologies at www.zend.com for a later version of Zend Guard Loader.
PHP 5.4.42 (cli) (built: Jun 12 2015 09:19:10)
Copyright 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright 1998-2014 Zend Technologies

PHP 5.4.42 (cli) (built: Jun 12 2015 09:19:10)
Copyright 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright 1998-2014 Zend Technologies
with XCache v3.2.0, Copyright 2005-2014, by mOo
with XCache Cacher v3.2.0, Copyright 2005-2014, by mOo

PHP 5.5.27 (cli) (built: Jul 10 2015 23:40:40)
Copyright 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright 1998-2015 Zend Technologies

PHP 5.6.11 (cli) (built: Jul 10 2015 22:43:20)
Copyright 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright 1998-2015 Zend Technologies

PHP 7.0.0beta3 (cli) (built: Aug 5 2015 19:11:12)
Copyright 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright 1998-2015 Zend Technologies





XCache

[xcache]
xcache.shm_scheme = «mmap»
xcache.size = 1G
xcache.count = 8
xcache.slots = 8K
xcache.ttl = 3600
xcache.gc_interval = 3600
xcache.var_size = 64M
xcache.var_count = 2
xcache.var_slots = 8K
xcache.var_ttl = 3600
xcache.mmap_path = "/tmp/xcache"
xcache.cacher = On
xcache.stat = On
xcache.optimizer = On
xcache.test = Off
xcache.readonly_protection = Off
[xcache.coverager]
xcache.coverager = Off
xcache.coveragedump_directory = ""





OpCache

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=1024
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=3907
opcache.fast_shutdown=1
opcache.blacklist_filename=/etc/php.d/opcache*.blacklist


APC

extension = apc.so
apc.enabled=1
apc.shm_size=1024M
apc.ttl=86400
apc.user_ttl=7200
apc.num_files_hint=20000
apc.enable_cli=1
apc.cache_by_default=1


Nginx:

nginx version: nginx/1.9.3
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --http-client-body-temp-path=/var/cache/nginx/client_body --http-proxy-temp-path=/var/cache/nginx/proxy --http-fastcgi-temp-path=/var/cache/nginx/fastcgi --http-uwsgi-temp-path=/var/cache/nginx/uwsgi --http-scgi-temp-path=/var/cache/nginx/scgi --lock-path=/var/run/nginx.lock --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-stream_ssl_module --with-stream --with-threads --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-mail_ssl_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-pcre --with-debug --add-module=/usr/src/nginx-1.9.3/ModSecurity-master/nginx/modsecurity --add-module=/usr/src/nginx-1.9.3/ngx_cache_purge-master --add-module=/usr/src/nginx-1.9.3/ngx_pagespeed-master --add-module=/usr/src/nginx-1.9.3/nginx-push-stream-module-master --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-ld-opt=-Wl,-E


worker_processes auto;
timer_resolution 100ms;
pid /var/run/nginx.pid;
thread_pool default threads=32 max_queue=655360;
events {
worker_connections 10000;
multi_accept on;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$host — $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" "$http_x_forwarded_for"';
log_format defaultServer '[$time_local][$server_addr] $remote_addr ($http_user_agent) -> "$http_referer" $host "$request" $status';
log_format downloadsLog '[$time_local] $remote_addr "$request"';
log_format Counter '[$time_iso8601] $remote_addr $request_uri?$query_string';
access_log off;
access_log /dev/null main;
error_log /dev/null;

connection_pool_size 256;
client_header_buffer_size 4k;
client_max_body_size 600m;
large_client_header_buffers 8 32k;
request_pool_size 4k;
output_buffers 1 32k;
postpone_output 1460;
gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript text/x-javascript application/javascript;
gzip_disable «msie6»;
gzip_comp_level 6;
gzip_http_version 1.0;
gzip_vary on;

sendfile on;
aio threads;
directio 10m;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;

keepalive_timeout 75 20;
server_names_hash_bucket_size 128;
server_names_hash_max_size 8192;
ignore_invalid_headers on;
server_name_in_redirect off;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'AES128+EECDH:AES128+EDH';
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
ssl_trusted_certificate /etc/ssl/certs/ca-certs.pem;

spdy_headers_comp 1;
add_header Alternate-Protocol 443:npn-spdy/3;
add_header Strict-Transport-Security «max-age=63072000; includeSubdomains;»;
add_header X-Content-Type-Options nosniff;

proxy_buffering off;
proxy_buffer_size 8k;
proxy_buffers 8 64k;
proxy_connect_timeout 300m;
proxy_read_timeout 300m;
proxy_send_timeout 300m;
proxy_store off;
proxy_ignore_client_abort on;

fastcgi_read_timeout 300m;
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

proxy_cache_path /var/cache/nginx/page levels=2 keys_zone=pagecache:100m inactive=1h max_size=10g;

fastcgi_cache_path /var/cache/nginx/fpm levels=2 keys_zone=FPMCACHE:100m inactive=1h max_size=10g;
fastcgi_cache_key "$scheme$request_method$host";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
upstream memcached_backend { server 127.0.0.1:11211; }

real_ip_header X-Real-IP;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
allow all;
server {
listen 80 reuseport;
}
include /etc/nginx/conf.d/*.conf;
}


server {
listen *:80;
server_name habratest.livelinux.ru www.habratest.livelinux.ru;
root /var/www/habratest.livelinux.ru/web;
index index.html index.htm index.php index.cgi index.pl index.xhtml;
error_page 400 /error/400.html;
error_page 401 /error/401.html;
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 405 /error/405.html;
error_page 500 /error/500.html;
error_page 502 /error/502.html;
error_page 503 /error/503.html;
recursive_error_pages on;
location = /error/400.html {
internal;
}
location = /error/401.html {
internal;
}
location = /error/403.html {
internal;
}
location = /error/404.html {
internal;
}
location = /error/405.html {
internal;
}
location = /error/500.html {
internal;
}
location = /error/502.html {
internal;
}
location = /error/503.html {
internal;
}
error_log /var/log/ispconfig/httpd/habratest.livelinux.ru/error.log;
access_log /var/log/ispconfig/httpd/habratest.livelinux.ru/access.log combined;
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location /stats/ {
index index.html index.php;
auth_basic «Members Only»;
auth_basic_user_file /var/www/clients/client1/web1/web/stats/.htpasswd_stats;
}
location ^~ /awstats-icon {
alias /usr/share/awstats/icon;
}
location ~ \.php$ {
try_files /70b2e8b422a0dce8501e61dafabafa26.htm php;
}
location php {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
location / {
try_files $uri @rewrite;
}
location @rewrite {
rewrite ^ /index.php;
}
}





php-fpm:

[web1]
listen = /var/lib/php5-fpm/web1.sock
listen.owner = web1
listen.group = client1
listen.mode = 0660
user = web1
group = client1
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0
chdir = /
php_admin_value[open_basedir] = /var/www/clients/client1/web1/web:/var/www/clients/client1/web1/private:/var/www/clients/client1/web1/tmp:/var/www/habratest.livelinux.ru/web:/srv/www/habratest.livelinux.ru/web:/usr/share/php5:/usr/share/php:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin
php_admin_value[session.save_path] = «tcp://localhost:11211»
php_admin_value[upload_tmp_dir] = /var/www/clients/client1/web1/tmp
php_admin_value[sendmail_path] = "/usr/sbin/sendmail -t -i -fwebmaster@habratest.livelinux.ru"





MariaDB:

Server version: 10.0.21-MariaDB MariaDB Server


[mysqld]

symbolic-links=0
default_storage_engine = InnoDB
innodb_file_per_table = 1
event_scheduler=on
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
connect_timeout = 600000
wait_timeout = 28800
max_connections = 600
max_allowed_packet = 512M
max_connect_errors = 10000
net_read_timeout = 600000
connect_timeout = 600000
net_write_timeout = 600000
innodb_open_files = 512
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 2
innodb_file_format = barracuda
innodb_locks_unsafe_for_binlog = 1
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
transaction-isolation = READ-COMMITTED
innodb-data-file-path = ibdata1:10M:autoextend
innodb-log-file-size = 256M
innodb_log_buffer_size = 8M
skip-name-resolve
skip-external-locking
skip-innodb_doublewrite
query_cache_size = 128M
query_cache_type = 1
query_cache_min_res_unit = 2K
join_buffer_size = 8M
read_rnd_buffer_size = 3M
table_definition_cache = 2048
table_open_cache = 2048
thread_cache_size = 128
tmp_table_size = 200M
max_heap_table_size = 200M
log_error = /var/log/mysql/mysql-error.log
key_buffer_size = 256M
optimizer_switch='derived_merge=off,derived_with_keys=off'



Как будем тестировать?


В текущем сервере, установлен zabbix-prox и его задачи каждую минуту:

  • Открывать главную страницу испытуемого сайта, дожидаться определенного содержимого на странице, убеждаться, что ответ от сервера — код 200.
  • Следующим шагом идет авторизация в админку сайта, это происходит отправкой соответсвующего POST запроса. Сверка текста и кода ответа на странице с заложенным эталоном. Этот шаг касается почти всех подсистем web-сервера, и во многом его скорость зависит от скорости взаимодействия с базой данных
  • Последним шагом является выход из админки сайта, сверка кода ответа и текста на странице выхода
  • По итогам каждого шага, zabbix будет скрупулезно замерять и записывать скорость рендеринга php-кода в html понятный браузеру и демонстрировать нам графики полученных результатов
  • Для каждого испытуемого будут записываться значения в течение одного часа и в качестве результата будет выступать средние значения за этот час
  • Скорость измеряется в KBps (килобайт в секунду), а отклик в ms (миллисекундах)
  • Тестирование будет с того же сервера, при обращении через localhost, так что влияние на результат скорости интернет-соединения исключено





Тестирование:



Сравнение скорости интерпретации страницы и времени отклика, для всех версий PHP, без использования оптимизаторов:

Чем выше результат (KBps), тем лучше



Чем ниже результат (ms), тем лучше






Сравнение скорости интерпретации страницы и времени отклика, для всех версий PHP, с использованием Opcache:

Чем выше результат (KBps), тем лучше



Чем ниже результат (ms), тем лучше






Сравнение скорости интерпретации страницы и времени отклика, PHP54, с использованием APC, xCache и Opcache

Чем выше результат (KBps), тем лучше



Чем ниже результат (ms), тем лучше





Сравнение скорости интерпретации страницы и времени отклика, PHP53, с использованием APC, xCache и Opcache

Чем выше результат (KBps), тем лучше



Чем ниже результат (ms), тем лучше





По вопросам сотрудничества, мои контакты в профиле
Aleksey Zhadan @SyCraft
карма
33,0
рейтинг 0,0
Senior System Administrator & LiveLinux.ru
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (41)

  • +1
    Исследование подтверждает мысль о том, что можно пользоваться любым поддерживаемым PHP. По скорости они примерно одинаковы.
    • +2
      Ну как бы да, вот только поддержка 5,4 заканчивается через месяц.
      • 0
        Это повод экстренно заняться адаптацией своих приложений на 5.5. :)
  • 0
    Статья оформлена на голову лучше, чем предыдущая, хотя конечно я всё равно остаюсь при мнении, что Zabbix ни разу не писькомерка, а 60 запросов — мало, а единицы измерения не указаны ни на одном из графиков.

    А что такое показатель «интерпретации страницы и времени отклика… Чем выше результат, тем лучше»? Это что за попугаи?

    Также прошу автора пояснить причины особенности своей методики проведения замеров, которые заставляю его делать 60 замеров в час. Откуда эта странная идея? Чем она вызывана?
    • 0
      Мы замеряем быстроту а не производительность
      • 0
        На вопрос ответьте, пожалуйста. Что такое «скорость интерпретации и времени отклика» и почему «чем больше — тем лучше»?
        • 0
          Скорость генерации html файла кодом — интерпретация. Php — интерпретируемый язык программирования.
          • 0
            Единицы измерения какие? Что цифры значат? Как меряли? Почему больше — лучше? Не понятно ничего.
            • 0
              Скорость измеряется в KBps (килобайт в секунду)
              Отклик измеряется в ms (миллисекунда)
  • +1
    Свой сайт попробовали запустить на PHP7 вместо HHVM (в версии под последнюю багу искали).
    результат — на чистом ПХП7 с кэшами сайт уделал версию на HHVM почти в 2 раза по всем параметрам…
    Посещаемость сайта — в среднем 11к уникальных пользователей, около 60Гб исходящего траффика и 90к посещений страниц в сутки.
    • 0
      уделал версию на HHVM почти в 2 раза по всем параметрам…

      Как-то сомнительно
      • 0
        Но факт…
        Переписки с тестами сайта, к сожалению, не осталось :(
        Тестирование проводилось siege объемом 10к запросов (по примерно 300 случайных линков).
        • 0
          что-то как-то очень сомнительно, PHP7 кое-как догоняет по производительности HHVM только, если он его рвет в нагрузочных тестах, стало быть у нас был хреново настроенный HHVM против настроенного PHP-FPM. Я с HHVM не особо работал (только для cli юзаю иногда) и не вкурсе как там чего с настройками… в голову приходит только то что в fpm больше воркеров стало и утилизировать ресурсы системы стало лучше.
  • 0
    Примерно совпадает с этими бенчмарками.
    www.zend.com/en/resources/php7_infographic
  • 0
    Я правильно понимаю, что мерили ту самую CMS-ку, у которой главная страница изкоробки делает 80-сколько-то-там запросов в базу?
    • 0
      Она довольно активно работает с базой, но про 80 запросов из коробки не уверен.
      Есть где почитать?
      судя по трейсу кода, это не так. Кроме того, запросы к базе происходят через модуль mysql или mysqli
      Они так же часть php и скорость их работы в фокусе этого теста.
      • 0
        drupal разве не через PDO работает? Там свои драйвера над mysqli?
        • 0
          а pdo это не модуль php?

          PHP Data Objects (PDO) – расширение, определяющее облегченный, единый интерфейс для доступа к базам данных в PHP. Каждый драйвер базы данных, который реализует интерфейс PDO, может предоставить определенные для базы данных функции как обычные функции расширения. Обратите внимание, что Вы не можете выполнить функции базы данных, используя расширение PDO отдельно; Вы должны использовать определенный для базы данных драйвер PDO, чтобы обратиться к серверу базы данных.
          • 0
            ну кроме того что существует огромная разница между pdo и mysqli… Ибо если рассуждать без учета различий — все есть php модуль на определенном уровне реализации.
            • 0
              Вот именно, потому и происходит сравнение на одинаковой конфигурации drupal. C одинаковым модульем работы с базой.
            • 0
              Это вообще не имеет значения в контексте статьи. Какая разница? =) Вопросы игнорировать некрасиво.
              • 0
                В контексте статьи разницы никакой, меня просто заинтересовало что использует Drupal в качестве основы для DBAL, PDO или свои драйвера над более низкоуровневыми API.
                • 0
                  Понял, спасибо.
        • –1
          А не всё ли равно?
          • 0
            Неясно, зачем мерять производительность PHP на проекте, который заведомо при росте нагрузки упирается в базу, а не фронт.
            • 0
              Что ты изменить скорость php, а не проекта )
              • –1
                Ну то есть тестирование ради тестирования, не имеющее никакой практической ценности.
            • 0
              В любом случае если выполнение PHP занимает 50% времени и php7 почти в 2 раза быстрее, мы всеравно получаем приблизительно 30% прирост производительности, что как по мне не мало. Да и в рамках тестов взаимодействие с базой все же было, так что все учтено.
              • –1
                Прирост производительности 30% при конкретном тестовом размере базы.
                Сколько он будет на реальном нагруженном проекте? Хорошо если 3% наберётся.
                • 0
                  При равном размере баз и прочих условиях, отичаются только интерпретаторы php
                  те на скорость в тесте влияют только испытуемые.
                • +1
                  Хорошо если 3% наберётся.

                  Да, давайте кидаться цифрами из головы. Для среднестатистического проекта на друпале не будет такой нагрузки на базу что работа СУБД займет более 50% времени обработки запроса.
                  • 0
                    Если такой найдется, то явно никакая магия и смена php проекту не поможет.
                    • 0
                      Обычно на этих проектах есть разработчики, которые думаю догадаются оптимизировать базу (возможно памяти для индексов не хватает или кривой плагин не добавил эти самые индексы), добавить кэш и т.д. Не все люди тупые (надеюсь). А показать что PHP7 быстрее и сильно быстрее PHP5.6 — это полезная информация. Возможно статья и сомнительна но доводы вроде «на больших нагрузках все будет плохо если брать инструменты для этого не предназначенные as is» это глупо.
                      • 0
                        все было хорошо до слов
                        Возможно статья и сомнительна
                        • 0
                          Я ее если честно не читал)
                          • 0
                            Не читал но осуждаю)
  • 0
    Уже задавал этот вопрос в комментариях да ошибся топиком, тот топик что то 2008 года… наверное здесь нужно было спросить:) Ребята подскажите пожалуйста есть ли понятие совместимости в работе одновременно нескольких кешеров? Что то ничего не нагуглил на эту тему. Служба поддержки хостинга долго пыталась настроить, но в итоге вырубила мне opcache и оставила только xcache, объяснив, что они совместно не работают. Это правда что можно использовать только один кешер на сервере иначе будут конфликты? Вообще у меня довольно тяжеловатые сайты на VPS и я хотел немного ускориться. Стоит apache+nginx php 5.6. Вот и интересуюсь может можно как то настроить совместную работу кешеров, Насчет opcache насколько я понял он кеширует только сами php скрипты а пользовательские данные не кеширует. Т.е. в конфиге движка указано какой кеш использовать file, memory, xcache. Если укажем file то понятно, что проблем не будет, а вот насчет memory и xcache непонятно что и как. Уважаемые гуру помогите пожалуйста разобраться в этом вопросе. Спасибо.
    • 0
      объяснив, что они совместно не работают

      да, они не будут работать вместе. Да и нет смысла, opcache работает лучше, дает больший прирост производительности. Еще один кешер никакого прироста не даст так как будет делать ровно то же но хуже.

      и я хотел немного ускориться

      Тут как со скидками, если у вас есть накопительная скидка в 20% и сегодня по акции 30%, вы всеравно получите скиду 30%. Если вы хоть 10 опкешеров заставите работать вместе вы не получите тот же прирост производительности который дает один opcache.

      а пользовательские данные не кеширует.

      для этих целей (хранение данных в разделяемой памяти) придумали apcu. А для хранения данных в файлах лучше использовать doctrine/cache.
  • 0
    Спасибо большое за ответ. Получается либо один xcache либо opcache+apcu… Вот здесь прочитал, что можно в настройках xcache вырубить кеширование opcode. toster.ru/q/67398 Кстати Fesor Вы тоже там участвуете:)
  • 0
    В общем немного разобрался, работа двух акселераторов одновременно будет приводить к ошибкам. Поэтому оставил родной opcache и Memcache.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.