Շատ մարդիկ օգտագործում են apache2-ը որպես վեբ սերվեր: Այնուամենայնիվ, քչերն են մտածում դրա կատարողականի օպտիմալացման մասին, ինչը ուղիղ համեմատականորեն ազդում է կայքի էջերի բեռնման արագության, սցենարների մշակման արագության վրա (մասնավորապես php), ինչպես նաև պրոցեսորի բեռնվածության ավելացման և օգտագործվող RAM-ի քանակի ավելացման վրա:
Այսպիսով, հետևյալ ձեռնարկը պետք է օգնի սկսնակ (և ոչ միայն) օգտվողներին:
Ստորև բերված բոլոր օրինակներն օգտագործվել են Raspberry PI 3, Debian 9, Apache 2.4.38, PHP 7.3 վրա:
Այսպիսով, եկեք սկսենք:
1. Չօգտագործված մոդուլների անջատում
Առաջին մեթոդը պարզապես անջատելն է այն մոդուլները, որոնք դուք չեք օգտագործում.
Ներկայումս օգտագործվող մոդուլների ցանկը կարելի է դիտել հրամանով.
apache2ctl -M
Մոդուլն անջատելու համար օգտագործեք հրամանը.
a2dismod *название модуля*
Համապատասխանաբար, մոդուլը միացնելու համար օգտագործեք հրամանը.
a2enmod *название модуля*
Խնդրում ենք նկատի ունենալ, որ օգտագործելիս a2dismod, մոդուլի անվանումը պետք է գրվի առանց բուն մոդուլ բառի։
Օրինակ, եթե դուք հրամանի ելքում եք apache2ctl -M տեսավ proxy_module, ապա այն անջատելու համար անհրաժեշտ է օգտագործել հրամանը. a2dismod վստահված անձ
Այն մոդուլները, որոնք ամենաշատը բեռնում են համակարգը (անձնական փորձից) հետևյալն են.
- PHP, Ruby, Perl և այլ մոդուլներ տարբեր սկրիպտային լեզուների համար
- SSL
- Վերալիցքավորեք
- CGI
Այսպիսով, այն դեպքերում, երբ ձեզ հարկավոր չեն այս մոդուլները, խորհուրդ եմ տալիս անջատել այս մոդուլները:
Նաև ցանկացած մոդուլ անջատելուց հետո խորհուրդ եմ տալիս օգտագործել հրամանը. apache2ctl configtest, որը կստուգի օգտագործվող կայքերի կոնֆիգուրացիան, և եթե անջատված մոդուլներից որևէ մեկը նրանց համար անհրաժեշտ էր, ապա դա սխալ կառաջացնի։
2. Փոխել MPM (Բազմաթիվ մշակման մոդուլ) և օգտագործել php-fpm
Լռելյայնորեն, տեղադրումից հետո apache2-ն օգտագործում է MPM Prefork (1 շարանը 1 կապի համար), ինչը զգալիորեն նվազեցնում է կատարողականությունը, բայց միևնույն ժամանակ բարելավում է կայունությունն ու անվտանգությունը։
Բայց կատարողականությունը օպտիմալացնելու համար ես խորհուրդ եմ տալիս օգտագործել MPM Worker-ը, որը թույլ է տալիս օգտագործել մի քանի թելեր մեկ կապի համար:
Այն միացնելու համար մենք օգտագործում ենք հետևյալ հրամանները.
a2dismod mpm_prefork //Отключаем prefork
a2dismod php7.3 //Отключаем модуль php, который зависит от prefork
a2enmod mpm_worker //Включаем worker
Այնուամենայնիվ, Worker-ն օգտագործելիս կարող եք խնդրի առաջ կանգնել, քանի որ... php7.3 մոդուլը կախված է Prefork մոդուլից:
Այս խնդիրը լուծելու համար եկեք տեղադրենք php7.3-fpm մոդուլը, որը կօգտագործվի PHP սկրիպտները գործարկելու համար.
apt-get update && apt-get install php7.3-fpm //Устанавливаем
systemctl enable php7.3-fpm && systemctl start php7.3-fpm //Добавляем в автозагрузку и запускаем
a2enmod php7.3-fpm && a2enconf php7.3-fpm.conf //Включаем модуль и конфиг для него
Հարկ է նշել, որ php-fpm-ի օգտագործումը նաև կնվազեցնի apache2 պրոցեսի կողմից օգտագործվող RAM-ի քանակը և փոքր-ինչ կարագացնի PHP սկրիպտների մշակումը։
3. Եզրակացություն
Այսպիսով, նման պարզ գործողություններով մենք կարողացանք օպտիմալացնել կատարումը և նվազեցնել մեքենայի բեռը (այս դեպքում RPI3):
Իհարկե, կան հարյուրավոր այլ օպտիմալացման տարբերակներ, ինչպիսիք են սեղմումը միացնելը (ինչն իսկապես օգտակար է, բայց մեծ մասն արդեն միացված է լռելյայնորեն), MPM կարգավորումների (կազմաձևման ֆայլերի) փոփոխությունը, HostnameLookups-ի անջատումը և այլն, բայց այս հոդվածում ես փորձեցի արտացոլում Սրանք այն կետերն են, որոնք ինձ ամենաշատը օգնեցին, և հուսով եմ, որ կօգնեմ մյուսներին:
Source: www.habr.com