Vidokezo 5 vya Kuongeza Utendaji wa Seva yako ya Wavuti ya Apache


Kulingana na ripoti ya hivi majuzi ya Netcraft (kampuni inayojulikana ya Mtandao ambayo hutoa kati ya huduma zingine takwimu za matumizi ya kivinjari), Apache inaendelea kuwa seva ya wavuti inayotumiwa sana kati ya tovuti na kompyuta zinazotazama mtandao.

Zaidi ya hayo, Apache inaendelea kupata ukuaji mkubwa kati ya seva za juu za wavuti, ikifuatiwa na Nginx na IIS. Kwa hivyo, ikiwa wewe ni msimamizi wa mfumo anayesimamia udhibiti wa usakinishaji wa Apache, unahitaji kujua jinsi ya kuhakikisha seva yako ya wavuti inafanya kazi kadri ya uwezo wake kulingana na mahitaji yako (au mteja wako).

Katika makala hii tutajadili vidokezo vichache ambavyo vitakusaidia kuhakikisha kwamba Apache itaendesha vizuri na kuwa na uwezo wa kushughulikia idadi ya maombi unayotarajia kutoka kwa wateja wa mbali.

Hata hivyo, tafadhali kumbuka kuwa Apache haikuundwa kwa lengo la kuweka rekodi za kuigwa - lakini, hata hivyo, bado inaweza kutoa utendakazi wa hali ya juu katika takriban hali yoyote ya utumiaji ambayo unaweza kufikiria.

KIDOKEZO #1: Sasisha Apache kila wakati hadi toleo lake jipya zaidi

Inakwenda bila kusema kuwa kuwa na toleo la hivi karibuni la Apache iliyosakinishwa labda ni moja ya mambo ya kwanza unayohitaji kuzingatia. Kuanzia tarehe 19 Novemba 2015, toleo jipya zaidi la Apache linalopatikana katika hazina za CentOS 7 ni 2.4.6, ilhali katika Debian ni 2.4.10.

Hata hivyo, kunaweza kuwa na uboreshaji wa hivi majuzi au urekebishaji wa hitilafu ambao umeongezwa kwa toleo thabiti lililotolewa, ambalo hutolewa ili kupakua na kusakinishwa kutoka kwa chanzo. Maagizo ya ujumuishaji na usakinishaji pia yametolewa hapa - kumbuka tu kwamba ukichagua njia hii ya kusasisha, unaweza kutaka kuhifadhi nakala za faili/tovuti zako za sasa za usanidi kama tahadhari.

Kwa vyovyote vile, unaweza kuangalia toleo lako lililosakinishwa kwa sasa kama ifuatavyo:

# httpd -v               [On RedHat/CentOS based systems]
# apache2 –v             [On Debian/Ubuntu based systems] 

Kama kanuni, shikamana na mbinu ya kusasisha iliyotolewa na msimamizi wa kifurushi cha usambazaji uliochagua (yum update httpd au aptitude safe-upgrade apache2, kwa CentOS au Debian, kwa mtiririko huo) isipokuwa hakuna njia nyingine. Unaweza kusoma maelezo ya hivi punde katika sehemu ya Hati ya Apache katika tovuti ya Mradi ya seva ya Apache HTTP.

KIDOKEZO #2: Ikiwa unatumia Kernel ambayo ni ya zamani zaidi ya 2.4, zingatia kusasisha sasa

Kwa nini? Matoleo ya Kernel 2.4 na hapo juu yana simu ya mfumo wa sendfile kernel iliyowezeshwa kwa chaguomsingi. Hiyo, kwa upande wake, hurahisisha uhamishaji wa faili za mtandao wa utendaji wa juu (ambazo zinatakikana katika muktadha wa mawasiliano ya mteja wa seva ya wavuti) na kuwezesha Apache kutoa maudhui tuli kwa haraka na kwa matumizi ya chini ya CPU kwa kufanya shughuli za kusoma na kutuma kwa wakati mmoja.

Unaweza kutazama kernel yako iliyosakinishwa kwa sasa na:

# uname -r

na ulinganishe na punje thabiti ya hivi punde katika www.kernel.org (4.3 wakati wa uandishi huu).

Ingawa ni mchakato usiokusudiwa kwa wanaoanza, kusasisha kernel yako ni zoezi la kuvutia ili kujifunza zaidi kuhusu mambo ya ndani ya Linux.

KIDOKEZO #3: Chagua Moduli ya Uchakataji Nyingi (MPM) ambayo inafanya kazi vyema kwa kesi yako

Kiutendaji, MPMs hupanua utendakazi wa kawaida wa Apache kwa kukuruhusu kuamua jinsi ya kusanidi seva ya wavuti ili kushikamana na milango ya mtandao kwenye mashine, kukubali maombi kutoka kwa wateja, na kutumia michakato ya watoto (na nyuzi, vinginevyo) kushughulikia maombi kama hayo.

Kuanzia na toleo la 2.4, Apache inatoa MPM tatu tofauti za kuchagua, kulingana na mahitaji yako:

  1. The prefork MPM hutumia michakato mingi ya watoto bila kuunganisha. Kila mchakato hushughulikia muunganisho mmoja kwa wakati mmoja bila kuunda nyuzi tofauti kwa kila moja. Bila kuingia kwa undani zaidi, tunaweza kusema kwamba utataka kutumia MPM hii wakati tu unatatua programu inayotumia, au ikiwa programu yako inahitaji kushughulikia, moduli zisizo salama kama vile mod_php.
  2. mfanyakazi MPM hutumia nyuzi kadhaa kwa kila mchakato wa mtoto, ambapo kila uzi hushughulikia muunganisho mmoja kwa wakati mmoja. Hili ni chaguo zuri kwa seva zenye trafiki nyingi kwani huruhusu miunganisho inayofanana kushughulikiwa kwa RAM kidogo kuliko ilivyokuwa hapo awali.
  3. Mwishowe, tukio MPM ndiyo MPM chaguo-msingi katika usakinishaji mwingi wa Apache kwa matoleo ya 2.4 na hapo juu. Ni sawa na MPM ya mfanyakazi kwa kuwa pia huunda nyuzi nyingi kwa kila mchakato wa mtoto lakini kwa faida: husababisha unganisho wa KeepAlive au wavivu (wakati unabaki katika hali hiyo) kushughulikiwa na uzi mmoja, na hivyo kufungia kumbukumbu ambayo inaweza. kugawanywa kwa nyuzi zingine. MPM hii haifai kwa matumizi na moduli zisizo salama kwenye nyuzi kama vile mod_php, ambazo badala yake lazima zitumike mbadala za PHP-FPM.

Kuangalia MPM inayotumiwa na usakinishaji wako wa Apache, unaweza kufanya:

# httpd -V

Picha iliyo hapa chini inaonyesha kuwa seva hii ya wavuti inatumia prefork MPM.

Ili kubadilisha hii, utahitaji kuhariri:

# /etc/httpd/conf.modules.d/00-mpm.conf          [On RedHat/CentOS based systems]
# /etc/apache2/mods-available/<mpm>.load   [On Debian/Ubuntu based systems]

Ambapo inaweza kuwa mpm_event, mpm_worker, au mpm_prefork.

na uondoe mstari unaopakia moduli inayotaka kama hivyo:

LoadModule mpm_event_module modules/mod_mpm_event.so

Kumbuka: Ili kufanya tukio la MPM lifanye kazi katika Debian, unaweza kulazimika kusakinisha kifurushi cha libapache2-mod-fastcgi kutoka kwa hazina zisizolipishwa.

Kwa kuongeza, kwa CentOS utahitaji php-fpm (pamoja na fcgi na mod_fcgid) ambapo katika Debian inaitwa php5-fpm (pamoja na apache2-mpm-tukio).

Mwisho, lakini sio uchache, anzisha tena seva ya wavuti na huduma mpya iliyosanikishwa ya php-fpm (au php5-fpm):

# systemctl restart httpd php-fpm && systemctl enable httpd php-fpm
# systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm

Ingawa unaweza kuweka Apache kutumia MPM maalum, usanidi huo unaweza kubatilishwa kwa msingi wa seva pangishi kwa mtindo uleule kama ilivyoonyeshwa hapo awali.

Weka tu lebo zinazolingana kwenye faili ya usanidi kwa kila seva pangishi pepe na uko tayari kwenda - lakini hakikisha kuwa unatumia MPM moja na moja pekee kwa kila vhost.

Mwishowe, tafadhali kumbuka kuwa bila kujali usambazaji wako uliochaguliwa, php-fpm inategemea utekelezaji wa FastCGI, ndiyo sababu nilipendekeza usakinishaji wa kifurushi cha ziada mapema.

Kwa maelezo zaidi na mifano juu ya php-fpm na jinsi inavyoweza pamoja na tukio MPM kuongeza utendakazi wa Apache, unapaswa kurejelea hati rasmi.

Hivi ndivyo ninavyoona baada ya kubadilisha MPM chaguo-msingi kutoka kwa prefork hadi tukio kwenye kisanduku kimoja kilichoonyeshwa kwenye picha iliyotangulia:

Katika CentOS 7, utahitaji kuhakikisha kuwa huduma za http na https zimewashwa kupitia ngome, na kwamba kiolesura cha mtandao kimeongezwa ipasavyo kwenye eneo chaguo-msingi.

Kwa mfano:

# firewall-cmd --zone=internal --add-interface=tun6to4 
# firewall-cmd --zone=internal --add-interface=tun6to4 --permanent 
# firewall-cmd --set-default-zone=internal 
# firewall-cmd --add-service=http 
# firewall-cmd --add-service=https 
# firewall-cmd --add-service=http --permanent 
# firewall-cmd --add-service=https --permanent 
# firewall-cmd --reload

Sababu kwa nini ninaleta hii ni kwa sababu hivi majuzi nilipata suala ambapo mipangilio ya usanidi chaguo-msingi ya firewalld katika VPS ya wingu ilizuia php-fpm na Apache kusindika faili za php.

Kama jaribio la kimsingi (nina hakika unaweza kufikiria yale magumu zaidi au yanayokusumbua), nitaunda faili ya php inayokagua uwepo wa faili nyingine inayoitwa test.php katika saraka sawa ya CentOS mbili. Seva 7 zilizo na sifa sawa za maunzi na mzigo lakini zenye MPM tofauti. Mmoja wao atatumia tukio na mwingine atatumia prefork:

Huu ndio msimbo wa php ambao nimehifadhi kwenye faili iitwayo checkiffileexists.php:

<?php
$filename = 'test.php';

if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
    echo "The file $filename does not exist";
}
?>

Kisha tutaendesha zana ya alama ya Apache (ab) na maombi 200 kwa wakati mmoja hadi maombi 2000 yakamilike:

# ab -k -c 100 -n 2000 localhost/checkiffileexists.php

Hebu tufanye mtihani na kulinganisha matokeo. Zingatia takwimu za utendaji:

Kama unavyoona, utendakazi wa seva iliyo na tukio ni bora zaidi kuliko mwenzake wa prefork katika kila kipengele cha jaribio hili.

TIP #4: Tenga RAM kwa busara kwa Apache

Labda kitu muhimu zaidi cha vifaa kuzingatiwa ni kiasi cha RAM kilichotengwa kwa kila mchakato wa Apache. Ingawa huwezi kudhibiti hili moja kwa moja, unaweza kuzuia idadi ya michakato ya mtoto kupitia maagizo ya MaxRequestWorkers (zamani yalijulikana kama MaxClients katika Apache 2.2), ambayo itaweka vikomo kwenye matumizi ya RAM na Apache. Tena, unaweza kuweka thamani hii kwa kila mwenyeji au kwa kila msingi wa mwenyeji pepe.

Ili kufanya hivyo, unapaswa kuzingatia kiasi cha wastani cha RAM kinachotumiwa na Apache, kisha uizidishe kwa idadi ya MaxRequestWorkers, na hiyo ni kiasi cha kumbukumbu ambacho kitatengwa kwa michakato ya Apache. Jambo moja ambalo hutaki seva yako ya wavuti ifanye ni kuanza kutumia ubadilishaji, kwani hiyo itapunguza sana utendakazi wake. Kwa hivyo, unapaswa kuweka matumizi ya RAM na Apache kila wakati ndani ya mipaka ambayo unaweza kumudu na kamwe usitegemee kubadilishana kwake.

Kwa mfano, kizuizi kifuatacho kitazuia idadi ya wateja kwa wakati mmoja hadi 30. Wateja zaidi wakipata seva pangishi, wanaweza kukumbwa na ucheleweshaji au hitilafu ya muda ambayo inaweza kutatuliwa kwa urahisi kwa kuonyesha upya kivinjari. Ingawa hii inaweza kuzingatiwa kuwa haifai, ni bora kwa seva na kwa muda mrefu, bora kwa tovuti yako pia.

Unaweza kuweka kizuizi hiki ndani ya /etc/httpd/conf/httpd.conf au /etc/apache2/apache2.conf, kulingana na kama unatumia CentOS au Debian.

Tafadhali kumbuka kuwa kanuni hiyo hiyo inatumika kwa MPM zote - ninatumia tukio hapa kuendelea na dhana iliyoainishwa katika kidokezo kilichotangulia:

<IfModule mpm_event_module>
    StartServers 3
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadLimit                      64
    ThreadsPerChild          25
    MaxRequestWorkers    30
    MaxConnectionsPerChild    1000
</IfModule>

Kwa vyovyote vile, inashauriwa sana urejelee hati za Apache 2.4 ili kuona ni maagizo gani yanaruhusiwa kwa MPM uliyochagua.

DOKEZO #5: Jua maombi yako

Kama kanuni ya kidole gumba, hupaswi kupakia moduli zozote za Apache ambazo hazihitajiki kabisa kwa programu yako kufanya kazi. Hii itahitaji angalau maarifa ya jumla ya programu zinazoendeshwa kwenye seva yako, haswa ikiwa wewe ni msimamizi wa mfumo na kuna timu nyingine inayosimamia usanidi.

Unaweza kuorodhesha moduli zilizopakiwa kwa sasa na:

# httpd -M          [On RedHat/CentOS based systems]
# apache2ctl -M     [On Debian/Ubuntu based systems]

Ili kupakua/kuzima moduli katika CentOS, utahitaji kutoa maoni nje ya mstari unaoanza na LoadModule (ama katika faili kuu ya usanidi au kwa msaidizi ndani /etc/httpd/conf.modules.d.

Kwa upande mwingine, Debian hutoa zana inayoitwa a2dismod kuzima moduli na inatumika kama ifuatavyo:

# a2dismod module_name

Ili kuwezesha tena:

# a2enmod module_name

Kwa vyovyote vile, kumbuka kuwasha tena Apache ili mabadiliko yaanze kutumika.

Muhtasari

Katika makala hii tumepitia vidokezo 5 ambavyo vitakusaidia kurekebisha seva ya wavuti ya Apache na kuongeza utendaji wake. Kwa kuongezea, unapaswa kukumbuka kuwa uboreshaji na utendakazi bila usalama hauna maana, kwa hivyo unaweza kutaka kurejelea nakala ya vidokezo vya ugumu vya Apache katika linux-console.net pia.

Kwa kuwa hatuwezi kufunika vipengele vyote vya mada hii katika makala hii vya kutosha, labda utafikiria mawazo mengine ambayo ungependa kushiriki na jumuiya nyingine. Ikiwa ndivyo, jisikie huru kutufahamisha kwa kutumia fomu ya maoni hapa chini.