Решил на одном из серверов вместо Apache установить быстрый и легкий Lighttpd. Просмотреть результаты тестирования этих двух web-сервером можно по ссылке: Lighttpd vs Apache.
Итак, результаты тестирования говорят сами за себя, так что "опробовать" Lighttpd однозначно стоит.
Итак, установку выполним как всегда из портов, благо они обновляются ежедневно по cron-у. Даем команду на установку:
# cd /usr/ports/www/lighttpd && make install clean && rehash |
При сборке были отмечены следующие опции:
Options for lighttpd 1.4.28_4 [X] BZIP2 Enable Bzip2 support [X] CML Enable Cache Meta Language support [X] FAM Enable fam/gamin support [X] GDBM Enable gdbm storage support [ ] IPV6 Enable IPV6 support [X] LIBEV Enable libev support [X] MAGNET Enable magnet support [X] MEMCACHE Enable memory caching support [X] MYSQL Enable MYSQL support [X] MYSQLAUTH Enable mysql auth (requires WITH_MYSQL) [X] NODELAY Set TCP_NODELAY on listening sockets [ ] OPENLDAP Enable LDAP support [X] OPENSSL Enable SSL support [X] SPAWNFCGI Depend on spawn-fcgi utility [ ] VALGRIND Enable valgrind support [ ] WEBDAV Enable WebDAV support |
Первым делом добавим поддержку Lighttpd в rc.conf:
# echo '# Web-server Lighttpd' >> /etc/rc.conf |
Потом приступаем к редактированию конфигурационного файла. В конфигурационный файл по умолчанию (/usr/local/etc/lighttpd/lighttpd.conf), внес только единственное изменение - отключил поддержку IPv6. Все остальное оставил по умолчанию - еще будет время для внесения изменений. Пытаемся запустить Lighttpd:
# sh /usr/local/etc/rc.d/lighttpd start Starting lighttpd. |
Хм... Как оказалось, каталога для размещения данных не существует. Необходимо его создать и выставить необходимые права:
# mkdir /usr/local/www/data |
Ну и для полноты картины, положим туда индексный html-файл:
# cat /usr/local/www/data/index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <body> <center><h3>Тестовая страница.</p></center> </body> |
Также укажем IP-адрес, на котором "слушать" запросы. "Забиндим" Lighttpd на IP 192.168.159.254. Соответственно строка в конфигурационном файле принимает следующий вид:
$SERVER["socket"] == "192.168.159.254:80" { } |
Снова пытаемся запустить Lighttpd:
# sh /usr/local/etc/rc.d/lighttpd start Starting lighttpd. |
Проверяем, есть ли в процессах Lighttpd:
# ps -ax | grep lighttpd 7051 ?? S 0:00.00 /usr/local/sbin/lighttpd -f /usr/local/etc/lighttpd/lighttpd.conf |
Lighttpd в процессах присутствует, что означает, что мы на верном пути. Кстати, стоит обратить внимание на то, что в памяти висит только один процесс, а не несколько, как в случае с Apache.
Теперь проверим, слушает ли Lighttpd запросы на 80 порту, и обрабатывает ли их. Попробуем в браузере ввести IP-адрес сервера. В результате имеем вывод следующей веб-страницы, что подтверждает обработку запросов:
Тестирование производительности.
Теперь попробуем провести самостоятельное тестирование производительности Lighttpd и Apache. На этой же машине установил Apache. Остановим Lighttpd и запустим Apache. Apache запускаем тоже на дефолтных настройках, изменив в конфигурационном файле все вхождения /usr/local/www/apache22/data на значение /usr/local/www/data. Стоит иметь ввиду, что отдаем статический файл index.html.
Добавим в rc.conf запуск Apache:
# echo 'apache22_enable="YES"' >> /etc/rc.conf |
Останов Lighttpd и запуск Apache:
# sh /usr/local/etc/rc.d/lighttpd stop # sh /usr/local/etc/rc.d/apache22 start |
Теперь с помощью ab (Apache HTTP server benchmarking tool) проверим и сравним производительность web-севреров.
apache-worker-2.2.17_2
# ab -n 1000 http://192.168.159.254/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 195.3.159.254 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: Apache/2.2.17 Server Hostname: 195.3.159.254 Server Port: 80 Document Path: / Document Length: 469 bytes
Concurrency Level: 1
Time taken for tests: 1.451 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 760000 bytes
HTML transferred: 469000 bytes
Requests per second: 689.24 [#/sec] (mean)
Time per request: 1.451 [ms] (mean)
Time per request: 1.451 [ms] (mean, across all concurrent requests)
Transfer rate: 511.55 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.1 1 2 Processing: 1 1 0.2 1 5 Waiting: 1 1 0.2 1 5 Total: 1 1 0.2 1 5 Percentage of the requests served within a certain time (ms) 50% 1 66% 1 75% 1 80% 1 90% 2 95% 2 98% 2 99% 2 100% 5 (longest request) |
Производительность: 689.24 запросов в секунду.
Останавливаем Apache и запускаем Lighttpd:
# sh /usr/local/etc/rc.d/apache22 stop # sh /usr/local/etc/rc.d/lighttpd start |
Теперь протестируем производительность Lighttpd.
lighttpd-1.4.28_4
# ab -n 1000 http://192.168.159.254/ This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 195.3.159.254 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: lighttpd Server Hostname: 195.3.159.254 Server Port: 80 Document Path: / Document Length: 469 bytes
Concurrency Level: 1
Time taken for tests: 1.294 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 696000 bytes
HTML transferred: 469000 bytes
Requests per second: 772.86 [#/sec] (mean)
Time per request: 1.294 [ms] (mean)
Time per request: 1.294 [ms] (mean, across all concurrent requests)
Transfer rate: 525.31 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.1 1 2
Processing: 1 1 0.1 1 2
Waiting: 0 1 0.1 1 2
Total: 1 1 0.2 1 3 Percentage of the requests served within a certain time (ms) 50% 1 66% 1 75% 1 80% 1 90% 1 95% 1 98% 2 99% 2 100% 3 (longest request) |
Хм... Если чесно, то я ожидал большего... Попробуем теперь "прикрутить" PHP к Lighttpd (ну и к Apache заодно). Для начала установим PHP. Опции сборки установил такие:
Options for php52 5.2.17 [X] CLI Build CLI version [X] CGI Build CGI version [X] APACHE Build Apache module [ ] DEBUG Enable debug [X] SUHOSIN Enable Suhosin protection system (not for jails) [X] MULTIBYTE Enable zend multibyte support [ ] IPV6 Enable ipv6 support [ ] MAILHEAD Enable mail header patch [ ] REDIRECT Enable force-cgi-redirect support (CGI only) [ ] DISCARD Enable discard-path support (CGI only) [X] FASTCGI Enable fastcgi support (CGI only) [X] FPM Enable fastcgi process manager (CGI only) [X] PATHINFO Enable path-info-check support (CGI only) |
Для Apache необходимо добавить в конфигурационный файл такие строки в блок <IfModule mime_module>:
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps |
Параметр DirectoryIndex необходимо видоизменить до следующего значения:
DirectoryIndex index.php |
Ну и создадим конфигурационный файл для PHP, воспользовавшись одним из предложенных примеров:
# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini |
Теперь поместим в /usr/local/www/data файл index.php следующего содержания:
# cat /usr/local/www/data/index.php
<?php |
Теперь попробуем "подружить" Lighttpd и PHP. Связка Lighttpd и PHP будет работать через FastCGI, поэтому необходимо, чтобы в php.ini переменная cgi.fix_pathinfo была установлена в значение 1 (по умолчанию).
Следующий шаг - правка конфигурационных файлов Lighttpd. В файле /usr/local/etc/lighttpd/modules.conf необходимо расскоментировать такую строку:
include "conf.d/fastcgi.conf" |
А в файл /usr/local/etc/lighttpd/conf.d/fastcgi.conf необходимо вставить такой блок:
fastcgi.server = ( ".php" => (( "bin-path" => "/usr/local/bin/php-cgi", "socket" => "/tmp/php.socket", "max-procs" => "2", "bin-environment" => ( "PHP_FCGI_CHILDREN" => "16", "PHP_FCGI_MAX_REQUESTS" => "10000" ), "bin-copy-environment" => ( "PATH", "SHELL", "USER" ), "broken-scriptfilename" => "enable" ))) |
После этого перезаускаем Lighttpd, чтобы изменения вступили в силу:
# sh /usr/local/etc/rc.d/lighttpd restart |
В результате должна отображаться страница свойств PHP (как при использовании Apache, так и при использовании Lighttpd:
Не буду уже описывать остановы и запуски определенных серверов... Итак, тестируем Apache на вивод PHP-содержимого.
# ab -n 1000 http://192.168.159.254/
This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.159.254 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: Apache/2.2.17 Server Hostname: 192.168.159.254 Server Port: 80 Document Path: / Document Length: 27895 bytes
Concurrency Level: 1
Time taken for tests: 1.097 seconds
Complete requests: 1000
Failed requests: 989
(Connect: 0, Receive: 0, Length: 989, Exceptions: 0)
Write errors: 0
Non-2xx responses: 989
Total transferred: 776381 bytes
HTML transferred: 506623 bytes
Requests per second: 911.48 [#/sec] (mean)
Time per request: 1.097 [ms] (mean)
Time per request: 1.097 [ms] (mean, across all concurrent requests)
Transfer rate: 691.07 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 1 Processing: 1 1 0.5 1 11 Waiting: 0 1 0.4 1 11 Total: 1 1 0.5 1 11 Percentage of the requests served within a certain time (ms) 50% 1 66% 1 75% 1 80% 1 90% 1 95% 1 98% 2 99% 4 100% 11 (longest request) |
А теперь проверим производительность PHP на Lighttpd:
# ab -n 1000 http://192.168.159.254/
This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.159.254 (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: lighttpd Server Hostname: 192.168.159.254 Server Port: 80 Document Path: / Document Length: 23106 bytes
Concurrency Level: 1
Time taken for tests: 3.873 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 23250000 bytes
HTML transferred: 23106000 bytes
Requests per second: 258.20 [#/sec] (mean)
Time per request: 3.873 [ms] (mean)
Time per request: 3.873 [ms] (mean, across all concurrent requests)
Transfer rate: 5862.47 [Kbytes/sec] received
Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 1 Processing: 3 3 0.2 3 5 Waiting: 1 1 0.2 1 3 Total: 3 4 0.2 4 5 Percentage of the requests served within a certain time (ms) 50% 4 66% 4 75% 4 80% 4 90% 4 95% 4 98% 5 99% 5 100% 5 (longest request) |
При выводе динамического содержимого Lighttpd сильно уступает в производительности Apache. Однако это может быть следствием того, что в Lighttpd PHP работает через FastCGI. Проверять эту теорию нету ни времени ни желания.
Остановимся на том, что Apache желательно использовать при выдаче динамического содержимого, а Lighttpd желательно использовать для выдачи статического контента.
Последние комментарии
11 недель 4 дня назад
35 недель 6 дней назад
2 года 36 недель назад
3 года 6 недель назад
3 года 29 недель назад
3 года 44 недели назад
3 года 45 недель назад
3 года 48 недель назад
4 года 7 недель назад
4 года 12 недель назад