Показ дописів із міткою Apache 2. Показати всі дописи
Показ дописів із міткою Apache 2. Показати всі дописи

вівторок, 3 березня 2009 р.

Мониторинг нагрузки Apache 2

Рассмотрим ситуацию: у вас на сервере хостится несколько сайтов работающих через mod_php под Apache 2.x. Вы обнаруживаете, что сервер начинает тормозить. Запускаете top и видите, что верхние строчки занимает процесс apache2 (или httpd). Ваша задача — узнать какой из сайтов и какими запросами грузит сервер.

Первый шаг — разрешить загрузку модуля mod_status и сконфигурировать его в /etc/apache2/mods-available/status.conf или в /etc/apache2/apache2.conf (я буду писать пути и команды применительно к Debian):


ExtendedStatus On

SetHandler server-status


Можно опционально ограничить доступ к URL /server-status по IP-адресу или даже поставить пароль.

Добавляем к любому сайту на сервере путь /server-status и смотрим, что там показывается. Если видим много запросов к какому либо сайту в состоянии «W», то можно предположить, что проблема с этим сайтом. Но это будет лишь гипотеза, так как узнать точно ситуацию по нагрузке, используя данный отчет, невозможно.
Используем хитрый ход. Установим модуль mod_perl:

apt-get install libapache2-mod-perl2 apache2-prefork-dev
Пакет apache2-prefork-dev нужен для последующей установки перловых модулей. Далее запустим cpan и установим пару модулей:

cpan> install Sys::Proctitle
cpan> install Apache2::ShowStatus
В файл /etc/apache2/mods-available/perl.conf добавим следующие строчки:


PerlModule Apache2::ShowStatus
PerlInitHandler Apache2::ShowStatus

Проставим линк на этот файл и перезагрузим Apache:

ln -s /etc/apache2/mods-available/perl.conf /etc/apache2/mods-enabled/
apache2 -t
invoke-rc.d apache2 restart
Смотрим что из этого получилось:

# ps -o user,pid,%cpu,args --sort=-%cpu -u www-data | egrep '^USER|httpd' | grep -v grep
USER PID %CPU COMMAND
www-data 14039 0.6 httpd: GET /notices_item/????? HTTP/1.0
www-data 14073 0.5 httpd: GET /notice/???????.html HTTP/1.0
www-data 14069 0.5 httpd: GET /r_9/ HTTP/1.0
www-data 14075 0.5 httpd: GET /notice/???????.html HTTP/1.0
Я заменил часть URL-ов вопросиками из соображений конфиденциальности.

Ну что же, это неплохо, теперь мы видим отсортированные по полю %CPU процессы Apache, а так же видим, какой запрос они выполняют в данный момент. Но мы не видим к какому сайту относятся эти запросы. Придеться немного подпатчить модуль Apache2::ShowStatus в файле /usr/local/share/perl/5.8.8/Apache2/ShowStatus.pm:

--- ShowStatus.pm.orig 2009-01-22 14:19:26.122058102 +0300
+++ ShowStatus.pm 2009-01-22 14:21:01.030847967 +0300
@@ -16,7 +16,7 @@
my $r=shift;

$r->pnotes( 'ProctitleObject'=>
- Sys::Proctitle->new( 'httpd: '.$r->the_request ) );
+ Sys::Proctitle->new( 'httpd: ['.$r->get_server_name().'] '.$r->the_request ) );
return Apache2::Const::DECLINED;
}
Перезагружаем Apache:

invoke-rc.d apache2 restart
Смотрим, что получилось:

# ps -o user,pid,%cpu,args --sort=-%cpu -u www-data | grep httpd | grep -v grep
www-data 16927 3.3 httpd: [www.????????.ru] GET /img_code.html HTTP/1.0
www-data 16885 3.2 httpd: [76.?????????.ru] GET /notices_item/???????/user_register/ HTTP/1.0
www-data 16921 1.0 httpd: [www.??????.ru] GET /products_item/?????? HTTP/1.0
www-data 16933 0.5 httpd: [www.????????.ru] GET /notice/????????.html HTTP/1.0
www-data 16878 0.5 httpd: [??????????.ru] GET /main_???????? HTTP/1.0
www-data 16930 0.2 httpd: [www.??????????.ru] GET /notice/??????????.html?sd=?????????????????????????????? HTTP/1.0
Ну вот, теперь мы видим и сайт, к которому пришел запрос, и сам запрос.

Кто еще какие способы использует для мониторинга нагрузки на хостинге в окружении Apache2 + mod_php5?

вівторок, 8 липня 2008 р.

Віртуальний веб-хостинг з Apache 2

Віртуальний хостинг дозволяє вер-серверам хостити більше, ніж один веб-сайт на одній машині. Саме так працюють веб-хостинги.


У даному ЯКЦЕ я спробую пояснити, як хостити на на одній машині
кілька сайтів, і отримувати до них доступ не лише за адресою типу
http://localhost/web-site, але й за будь яким, прив’язаним до низ
доменним ім’ям, наприклад, http://www.my-web-site.org.ua/.



Встановлення apache2


 sudo apt-get install apache2-common apache2-utils


Налаштування


Відкриємо основний конфіґураційний файл, /etc/apache2/apache2.conf. Пошук за словом virtual приведе нас до наступного рядка:


/etc/apache2/sites-enabled/

Він означає, що коли ми запустимо apache, він прочитає файли у теці /etc/apache2/sites-enabled/. Давайте переглянемо її вміст:


 cd /etc/apache2/sites-enabled/
   ls -l

total 0

lrwxrwxrwx 1 root root 36 2008-01-07 17:01 000-default -> /etc/apache2/sites-available/default


Щож, це лише посилання на на файл у теці /etc/apache2/sites-enabled/. Ви мали б замислитися над тим, що тут робить посилання. Власне, такий підхід дозволяє вам:

1. мати простий конфіґураційний файл;

2. змінювати або створювати нові хости редагуванням/створенням файлів у /etc/apache2/sites-available;

3. не потрібно перезапускати веб-сервер після блокування одного хосту,
оскільки, для цього достатньо просто видалити посилання у теці /etc/apache2/sites-enabled/ на файл у теці /etc/apache2/sites-available/.


Тепер припустимо, що ви бажаєте прив’язати доменне ім’я
my-web-site.org.ua до конкретного веб-сайту на вашій машині, який
розміщується у теці /var/www/my-web-site/.


Для цього, перше за все, необхідно створити новий в /etc/apache2/sites-available, наприклад, my-web-site.conf:


 sudo vim my-web-site.conf


І додати до нього наступні рядки:




ServerAdmin webmaster@localhost

ServerAlias www.my-web-site.org.ua

DocumentRoot /var/www/my-web-site/

#якщо бажаєте використовувати awstats

ScriptAlias /awstats/ /usr/lib/cgi-bin/

#вказуємо власний файл журналу для даного хосту

CustomLog /var/log/apache2/my-web-site.org.ua-access.log combined


Ну ось, ми створили новий віртуальний хост, але він й досі не є
активним/дозволеним. Для цього, як сказано вище, нам всього лиш
потрібно додати посилання на файл /etc/apache2/sites-available/my-web-site.conf. Для цього:


 cd /etc/apache2/sites-enabled/
 
sudo ln -s /etc/apache2/sites-available/my-web-site.conf my-web-site.conf


Тепер apache готовий до перезапуску, однак, спершу ми повинні
повідомити Linux про те, щоб вона шукала хости з адресами
my-web-site.org та www.my-web-site.org.ua не в тенетах, а на локальній
машині. Для цього потрібно відредагувати файл /etc/hosts наступним чином:


127.0.0.1 localhost.localdomain localhost dev.example.com www.dev.example.com

Тепер apache можна сміливо перезапустити:


 sudo /etc/init.d/apache2 reload


Для тесту відкрийте свій оглядач тенет (сподіваюся, це не Internet
Explorer ;)), і наберіть адресу http://www.my-web-site.org.ua.


Чому Debian рулить


Зрозуміло, що, якщо ви хостите на одній машині велику кількість
віртуальних веб-хостів, вам здасться морокною робота по їхньому
тимчасовому блокуванню та розблокуванню, тому в Дебіені для цього є дві
прості, але дуже зручні утилітки.


Для того, що заблокувати віртуальний хост:


 sudo a2ensite mysiteavailable-site


І для його розблокування:


 sudo a2dissite mysiteavailable-site


Де mymysiteavailable-site — ім’я віртуального хосту, яке відповідає імені файлу у теці /etc/apache2/sites-available/, наприклад, my-web-site.conf


Оригінал статті http://www.debian-administration.org.ua/articles/virtual_hosting_using_apache2/