Green Myshko Apache ефективността на оптимизирането


Според Netcraft, Apache - най-популярният уеб сървър в Интернет, тя служи на множество сървъри и сайтове. Често е необходимо да се увеличи производителността на уеб сървър. Може би най-добрият начин да го направя - да оформлението интерфейса + гръб, но тя може да изисква доста големи промени в приложението (например, най-вероятно да падне най-различни показатели за напредък като цяло качвате файлове).

Друг начин - просто да увеличат производителността на сървъра - да осигури по-бърз процесор и повече памет.

Въпреки това, както първата, така и втората изисква много време и ресурси, така че за първи път можете да се опитате да се ускори Apache чрез оптимизиране на конфигурацията му. Има оптимизации, които могат да се прилагат само когато прекомпилирате Apache, докато други могат да бъдат използвани без да се налага да компилирате сървъра.

Заредете само необходимите модули


Apache - модул на програмата, повечето от функциите, които се изпълняват в модули. Така, тези модули могат да бъдат събрани в както и събрани като ДСО - динамични библиотеки. Повечето съвременни дистрибуции идват с набор Apache DSO, така че не се нуждаят от модулите може лесно да бъдат деактивирани без да прекомпилирате.

Изберете правилния MPM


В Apache всяка заявка се обработва в процес или нишка. При съставяне на Apache ви позволява да изберете една от броя на MPM (Multi-обработка модул), които са отговорни за слушане пристанища, получаването на молби и разпространение на тези искания на децата процеси или нишки, в които са били обработени тези искания.

MPM избор зависи от няколко фактора, като например наличието на подкрепа нишка в операционната система, количеството свободна памет, както и на изискванията за стабилност и безопасност.

Ако сигурността е важно, трябва да изберете peruser MPM, да жертват производителност.

Ако производителността е важна, изборът е ограничен до две MPM: prefork и работник.

Работник - MPM-линия, т.е. там всяка заявка се обслужва от отделна нишка на един от процесите на детето. Потоци - повече светлина обекти за операционната система от процеси, които използват паметта по-ефективно, и превключването на контекста бързо до тях. Въпреки това, поради факта, че всяка нишка има достъп до цялата памет процес, работник MPM по-податливи на повреда: неизправност в един поток може да доведе до спад на целия процес, който е бил на потока (оттук MPM на работник работи няколко деца процеси с множество нишки във всяка ).

Perfork - MPM използва няколко деца процеси, всяко дете се справя един процес връзка. Поради факта, че процесът - по-тежката структура, тя използва малко по-ресурси, но е малко вероятно да катастрофа - обработката на всяко искане е независима от други процеси.

За съжаление, за промяна на Apache MPM изисква прекомпилиране. Тогава покажете предимствата източник базирани дистрибуции: лесно можете да компилирате Apache и всички нейни зависими пакети, без да се обръща на системата в депо. Двоични дистрибуции изход от тази ситуация по различен начин. Такива като RHEL в режим на оборотите на Apache е само на две версии на Apache - с работник и prefork MPM на (prefork е по подразбиране). Въпреки това, MPM на работник не поддържа PHP. Така че, ако искате да PHP и работник MPM трябва да го компилирате сами или да намерят трети страни хранилища.

запитвания DNS

AllowOverride


Ако директивата за AllowOverride не е настроен да "Няма", Apache ще се опита да отвори .htaccess файлове във всяка директория, която той посещава и всички директории над него. Например:


Ако бъдете подканени /index.html, Apache ще се опита да отвори (и интерпретира) /.htaccess файлове, /var/.htaccess, /var/www/.htaccess и /var/www/html/.htaccess. Това увеличава времето за обработка на искането. Така че, ако имате нужда от .htaccess само една директория, оставете го само за нея:

FollowSymLinks и SymLinksIfOwnerMatch

Освен това, се изискват допълнителни системни функции, когато FollowSymlinks не е инсталиран. по този начин едно оптимално положение за изпълнение - когато FollowSymlinks опция е активирана.

Съдържание прегово


Избягвайте negotiaion съдържание.

MaxClients


директива MaxClients определя максималния брой едновременни заявки, че сървърът ще подкрепят. Apache няма да създаде повече процеси / теми от MaxClients. Значение MaxClient Долно не бъде твърде малък (в противен случай много клиенти остават необслужваните), но не трябва да настройвате прекалено много - това е по-добре да не служат някои клиенти, отколкото да изчерпи всички ресурси, за да се получи в замяна и умират под товар. Една добра стойност може да бъде MaxClients = сума заделена памет на уеб сървър / максимален размер на процеса на дете или конци. За статични файлове, Apache използва около 2-3 MB в този процес, за високоговорители (PHP, CGI) - зависи от сценария, но обикновено е около 16-32 MB.

Можете да се изчисли приблизителния размер, като погледнете в графата RSS в изхода на `к.с. -ylC уеб---Сортирай: rss`

Ако сървърът вече служи MaxClients искания, нови искания ще дойдат на мястото, размерът на който се определя от директива ListenBacklog.

MinSpareServers, MaxSpareServers и StartServers


защото създаване на конци, особено процес - една скъпа операция, Apache им създава по-рано. Директива MaxSpareServers MinSpareServers и настроите колко процеси / конци трябва да чакат в готовност да приеме заявката (максимум и минимум). Ако стойността е твърде малки MinSpareServers и изведнъж получаваме много искания, Apache ще трябва да се създаде много нови процеси / теми, които ще създават допълнителна тежест в тази стресова ситуация. От друга страна, ако е прекалено големи MaxSpareServers, Apache ще се зареди много тези процеси на системата, дори ако броят на клиентите е минимално.

Опитайте се да се създаде такава MinSpareServers и MaxSpareServers, Apache да не се създава повече от 4 процеси / теми в секунда. Ако той създава повече от 4 в ErrorLog ще постави съобщение на него. Това е - един сигнал, че MinSpareServers твърде малко.

MaxRequestsPerChild


директива MaxRequestsPerChild определя колко заявки могат да се справят с едно дете процес / нишка, преди да е приключило. Стойността по подразбиране за тази директива е настроен на 0, което означава, че след създаването си процес / нишка е пълна никога (добре, с изключение на сървъра или да спре разпадането на процес / нишка). Аз препоръчвам да инсталирате MaxRequestsPerChild равна на някои доста голям брой (няколко хиляди). Това няма да се създава ненужна тежест, са свързани с факта, че Apache ще трябва да се създадат нови процеси-, докато в същото време това ще ви помогне да се отървете от проблеми с изтичане на памет в процеса на детето (което е възможно например, ако използвате PHP нестабилна версия).

KeepAlive и KeepAliveTimeout


KeepAlive позволява на множество искания в една TCP-връзка. Това е особено полезно за HTML-страници с много снимки. Ако KeepAlive комплект е изключен, а след това на самата страница и за всяко изображение, за да бъде създадена отделна връзка (което ще трябва да се справят с майстор-процес), което е лошо за двата сървъра и клиента. Така че се препоръчва да се създаде KeepAlive на Включено, за такива случаи. За други приложения (например за изтегляне сървър) KeepAlive могат да бъдат безполезни или дори вредни, защото Keepalive когато сървърът затваря връзката веднага, но чака KeepAliveTimeout секунди ново искане. За да обработим не прекалено дълго висеше в безсмислено чакане KeepAliveTimeout втвърдил достатъчно малък, около 5-10 секунди обикновено са достатъчни.


HTTP компресия е дефинирана в стандарта HTTP / 1.1, а сега всички най-нови програми клиент и почти цялото си сървъри подкрепа. Сървърът може да даде отговор в софтуерна или дефлация, а клиентската програма, без потребителят да декомпресира данните. Това намалява количеството трафик предава (до 75%), но разбира се, се увеличава използването на процесора.
Въпреки това, ако вашият сървър се посещава от много клиенти с бавна връзка, компресия може да се намали натоварването на сървъра си, защото сървърът ще бъде в състояние бързо да прехвърли сгъстен отговор и да освободи ресурси, заети от процеса на дете. Особено силно този ефект може да се забележи, ако имате бърз процесор, но малко памет.

От страна на клиента за кеширане


Не забравяйте да настроите Expires хедър за статични файлове (вж. Mod_expires модул). Ако файлът не се променя, то трябва винаги да се опитват да кешира на клиента. След това клиентът ще зареди страниците по-бързо, и сървърът е свободен от излишни запитвания.