Poprawiam swoją stronę główną pod kątem wydajności, obecnie obsługuje ona około 200 żądań na sekundę w 3.14.by, która zjada 6 zapytań SQL, i 20 req / sekundę w 3.14.by/forum, które jest forum phpBB.
O dziwo, liczby są prawie takie same na niektórych serwerach VPS i dedykowanym serwerze Atom 330.
Oprogramowanie serwera to: Apache2 + mod_php prefork 4 childs (tutaj wypróbowano różne numery), php5, APC, nginx, memcached do przechowywania sesji PHP.
MySQL jest skonfigurowany do zużywania około 30% dostępnej pamięci RAM (~ 150 Mb na VPS, 700 Mb na dedykowanym serwerze)
Wygląda na to, że gdzieś jest wąskie gardło, które nie pozwala mi iść wyżej, jakieś sugestie? (tj. wiem, że wykonanie mniej niż 6 SQLów przyspieszyłoby to, ale nie wygląda to na czynnik ograniczający, ponieważ sqld zjada nie więcej niż kilka% w górę z powodu zapytań buforowanych)
Czy ktoś przetestował, że kopanie gotowego apache2 i pozostawienie samego nginx + php jest znacznie szybsze?
Więcej testów porównawczych
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.
Aktualizacja: Wydaje się, że wąskim gardłem jest wydajność MySQL na buforowanych danych. Strona z pojedynczym kodem SQL pokazuje 354 req / s, z 6 kodami SQL - 180 req / s. Jak myślisz, co mogę tu ulepszyć? (Mogę rozwidlić 100-200 Mb dla 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/