LINUX.ORG.RU

Оптимизация nginx: 200k... 150k... 5k... 1k... wordpress... :D

 , ,


13

6

ощщем, ЛОР, пилю очередной тупняк, проходи мимо.

бенчмарк

ab -n 100000 -c 100 -k -H "Accept-Encoding: gzip, deflate" localhost/ 2>&1 | egrep "^(Failed|Requests)"

процессор Pentium G3258 с разгоном до 3.9GHz, остальное не важно. хотите пофапать на хай-лоад?

значит к делу. вот такой конфиг, (сервер _) отлавливает все запросы, которые не подходят под другие хосты.

server {
  listen 80;
  server_name _;

  location = /_.gif {
    empty_gif;
  }
}

ab localhost/_.gif выдаст вам результат в 200000 (двести тысяч!) запросов в секунду. empty_gif это модуль, поэтому такой быстрый.

к сожалению, со статикой картина чуть более печальна. ab localhost/index.html (файлик, что идет вместе с nginx'ом), сообщает о выполнении 125000 тире 150000 запросов в секунду, что тоже не так плохо. то есть, берете свой проект, оборачиваете всю динамику в fastcgi_cache, дабы nginx кэшировал запросы в статику и получаете очень быстрый сайт, мягко говоря.

рецепт успеха

worker_processes 4;
worker_priority -5;

worker_rlimit_nofile 9000;

timer_resolution 100ms;

events {
  use epoll;

  worker_connections 9000;
  multi_accept on;
}

чтобы не расходовать ресурс жесткого диска, I/O, желательно отключить логи, ну или, указать buffer=, да побольше.

error_log /var/log/nginx/error.log warn;

access_log /var/log/nginx/access.log main buffer=64k;
access_log off;
log_not_found off;

очень ресурсоемкая директива

ssi on;

с ней производительность просядет до копеечных 40000 тысяч на статике и на 20% на динамике, что лучше откажитесь от нее вообще. забудьте.

gzip on;

баллада о двух стульях и матери. придется выбирать между процессорным временем и линком. ресурсоемкая операция, производительность сервера страдает на 20%, но зато пропускная способность сети может быть увеличена в 3 раза за счет сжатия трафика.

open_file_cache max=9000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

с этим думаю ясно, кэш дескрипторов файлов. нужен.

забудьте о существовании if в nginx, не злоупотребляйте location, каждый отнимает много ресурсов.

любой другой ара-тюнинг по вкусу, на самом деле получится что-то вроде экономии на спичках, так например, tcp_nodelay дает разницу всего в 1000 запросов при 200000 к _.gif (empty_gif). посему смотреть нужно строго по ситуации, конкретных советов уже не дам.

теперь от статики к динамике. обязательно установить php opcache.

# curl http://php.net/distributions/php-5.5.23.tar.xz | tar -xJ -v
# cd php-5.5.23
# ./configure --disable-all --enable-opcache
# make build-modules
# install -m 755 modules/*.so /usr/lib/php/extensions
# echo "zend_extension=opcache.so" > /etc/php/conf.d/opcache.ini

хороший прирост в скорости дает Ъ-распараллеливание и правильная настройка. запускать нужно два бэкенда, абсолютно одинаковых, на одном хосте.

upstream php-fpm {
  server unix:/var/run/php5-fpm.sock0 weight=100 max_fails=5 fail_timeout=5;
  server unix:/var/run/php5-fpm.sock1 weight=100 max_fails=5 fail_timeout=5;
}
location ~ \.php$ {
  try_files $uri =404;

  fastcgi_pass php-fpm;
  fastcgi_index index.php;

  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
}

настройка php-fpm'ов /etc/php/pool{0,1}.conf

[global]
log_level = notice
emergency_restart_threshold = 0
emergency_restart_interval = 0
process_control_timeout = 0
daemonize = yes

[pool0]
listen = /var/run/php5-fpm.sock0
listen.owner = www
listen.group = www
listen.mode = 0660

user = www
group = www

pm = static
pm.max_children = 8
pm.max_requests = 500

второй точно такой же

:%s/pool0/pool1

:%s/sock0/sock1

# /usr/sbin/php-fpm --fpm-config /etc/php/pool0.conf
# /usr/sbin/php-fpm --fpm-config /etc/php/pool1.conf
# /usr/sbin/nginx -t && /usr/sbin/nginx -s reload

а теперь получите пятикратный прирост производительности php. вот.

★★★★★

Иногда мне начинает казаться, что 140 знаков на сообщение - не такая плохая идея.

no-such-file ★★★★★
()

обязательно установить php opcache.
php-5.5.23

Некрофил, самому не противно? PHP 5.6.7 stable.
Силами пакетного менеджера слабо поставить?
Да и вообще, скоро на php-ng переходить надо будет.

// И да, я бы первым делом Varnish поставил фронтом.

devl547 ★★★★★
()
Последнее исправление: devl547 (всего исправлений: 1)

А зачем 2 бекенда на одном хосте? Второй на подхвате если первый упадет или так паралелиться?

duck
()

пок пок пок memcached кудааааах

когда сифилисная девушка рассказывала, как она ходила в сауну, я пропускал это мимо ушей, ну ходила и ходила, чо.. хотя следовало насторожиться, ведь, приличному человеку нечего делать в этих самых саунах, а потом тем более об этом кому-то рассказывать.

сейчас читаю о memcached, оно умеет подключение по unix socket, но везде, везде мать его, в качестве примера предлагают подключение по tcp://127.0.0.1:11211 для php session.save_path.

прежде чем даже ставить memcached и опробовать его самому, стоило задуматься, какого черта веб-разработчики, так яро дрочащие на скорость, используют tcp вместо unix socket. но снова пропустил это мимо себя.

сайт обрабатывает (rps == request per second)

-- 3500 рпс без session_start

-- 2600 рпс с session_start которая хранится в memcached

-- 3100 рпс с session_start которая хранится в файлах в tmpfs

так вот, нахрен этот memcached, нахрен.

кукарекают на скорость

используют tcp вместо unix socket

вся суть веб-макак

Spoofing ★★★★★
() автор топика

ладно, я погорячился.

на самом деле ситуация следующая. вам нужно сходить в магазин за хлебом, который находится от вас на расстоянии 500 метров.

можно дойти пешком, можно доехать на велосипеде, можно доехать на машине.

memcached это машина, расчитанная на дальние расстояния. оно расширяется, оно действительно помогает при высокой нагрузке, реально высокой.

а для уютненького локалхоста лучше прогуляться пешочком. и выбрать наиболее простое решение, вроде файлов в tmpfs. так естественно, что будет быстрее, чем завести-прогреть машину.

Spoofing ★★★★★
() автор топика

чтобы не расходовать ресурс жесткого диска, I/O, желательно отключить логи

Хотел бы я сказать, что дальше не читал, но это будет неправда, поэтому спрошу, а логи отключить это тоже только для локалхоста и бенчмарков? И на чём-то серьёзном так не делается?

Pyzia ★★★★★
()

Слабо поднять частоту до 4.6?
Спасибо за PHP, на моем старом cedar mill с даунклоком до 1.9ghz@1.1v слегка подлагивал WordPress

mystery ★★
()

Тему не читал, но одобряю.

amazpyel ★★★
()
Ответ на: комментарий от Spoofing

А велосипед выкинуть, потому что никто не любит велосипедитстов?

shuck ★★★
()

хотите пофапать на хай-лоад?


А хайлоад то где?

ab localhost/_.gif выдаст вам результат в 200000 (двести тысяч!) запросов в секунду.


И куда он уперся?

со статикой картина чуть более печальна


почему?

php opcache.


какой из них?

апускать нужно два бэкенда, абсолютно одинаковых, на одном хосте.


зачем?

php-fpm


почему не apache?

пятикратный


не вижу

прирост производительности php


Так пхп, nginx или статики?

wordpress


и где он?

Erfinder
()

Спуфи, давай смотреть правде в глаза. Если 3 пользователя одновременно могут читать твой блог, это уже с хорошим запасом. Какие там 1k.

kauto
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.