Estou ajustando minha página inicial para desempenho, atualmente ele lida com cerca de 200 solicitações / segundo no 3.14.by, que realiza 6 consultas SQL e 20 req / segundo no 3.14.by/forum, que é o fórum phpBB.
Curiosamente, os números são praticamente os mesmos em alguns servidores VPS e Atom 330 dedicados.
O software para servidor é o seguinte: Apache2 + mod_php prefork 4 childs (tentei números diferentes aqui), php5, APC, nginx, memcached para armazenamento de sessões PHP.
O MySQL está configurado para consumir cerca de 30% da RAM disponível (~ 150Mb em VPS, 700Mb em servidor dedicado)
Parece que há um gargalo em algum lugar que não me permite ir mais alto, alguma sugestão? (ou seja, eu sei que fazer menos de 6 SQLs o tornaria mais rápido, mas isso não parece um fator limitante, pois o sqld não consome mais do que alguns% no topo devido a consultas em cache)
Alguém já testou que chutar o apache2 pré-bifurcado e deixar apenas o nginx + php é muito mais rápido?
Mais alguns benchmarks
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.
Atualização: Parece que o gargalo é o desempenho do MySQL nos dados em cache. A página com SQL único mostra 354req / s, com 6 SQLs - 180 req / s. O que você acha que eu posso ajustar aqui? (Eu posso extrair 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/