Estoy ajustando mi página de inicio para el rendimiento, actualmente maneja alrededor de 200 solicitudes / segundo en 3.14.by que come 6 consultas SQL, y 20 req / segundo en 3.14.by/forum que es el foro phpBB.
Por extraño que parezca, los números son casi iguales en algunos VPS y servidores Atom 330 dedicados.
El software del servidor es el siguiente: Apache2 + mod_php prefork 4 childs (probamos diferentes números aquí), php5, APC, nginx, memcached para el almacenamiento de sesiones PHP.
MySQL está configurado para consumir aproximadamente el 30% de la RAM disponible (~ 150Mb en VPS, 700Mb en un servidor dedicado)
Parece que hay un cuello de botella en algún lugar que no me permite ir más alto, ¿alguna sugerencia? (es decir, sé que hacer menos de 6 SQL lo haría más rápido, pero esto no parece ser un factor limitante, ya que sqld no come más que unos pocos% en la parte superior debido a consultas en caché)
¿Alguien ha probado que patear apache2 preformado y dejar solo nginx + php es mucho más rápido?
Algunos puntos de referencia más
Small 40-byte static file: 1484 r/s via nginx+apache2, 2452 if we talk to apache2 directly.
Small "Hello world" php script: 458 r/s via ngin+apache2.
Actualización: Parece que el cuello de botella es el rendimiento de MySQL en los datos en caché. La página con SQL único muestra 354req / sec, con 6 SQL's - 180 req / sec ¿Qué crees que puedo modificar aquí? (Puedo desembolsar 100-200Mb para MySQL)
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
default-character-set=cp1251
collation-server=cp1251_general_cs
skip-character-set-client-handshake
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
bind-address = 127.0.0.1
key_buffer = 16M
max_allowed_packet = 8M
thread_stack = 64K
thread_cache_size = 16
sort_buffer_size = 8M
read_buffer_size = 1M
myisam-recover = BACKUP
max_connections = 650
table_cache = 256
thread_concurrency = 10
query_cache_limit = 1M
query_cache_size = 16M
expire_logs_days = 10
max_binlog_size = 100M
[mysqldump]
quick
quote-names
max_allowed_packet = 8M
[mysql]
[isamchk]
key_buffer = 8M
!includedir /etc/mysql/conf.d/
fuente