• Digitaaliset tarvikkeet
  • Palvelin
  • Digitaalinen elämä
  • Tietosuojakäytäntö
  • Ota meihin yhteyttä
  1. Home
  2. Article
  3. Apache-verkkopalvelimen suorituskyvyn optimointi

Apache-verkkopalvelimen suorituskyvyn optimointi

Rsdaa 03/01/2022 1750

Tila: Vanhentunut

Tämä artikkeli kattaa Ubuntun version, jota ei enää tueta. Jos käytät tällä hetkellä palvelinta, jossa on Ubuntu 12.04, suosittelemme päivittämään tai siirtymään tuettuun versioon Ubuntusta:

Syy: Ubuntu 12.04 päättyi (EOL) 28. huhtikuuta 2017, eikä se enää saa tietoturvakorjauksia tai päivityksiä. Tätä opasta ei enää ylläpidetä.

Katso sen sijaan: Tämä opas saattaa silti olla hyödyllinen viitteenä, mutta se ei välttämättä toimi muissa Ubuntu-julkaisuissa. Jos saatavilla, suosittelemme käyttämään käyttämääsi Ubuntu-versiota varten laadittua opasta. Voit käyttää sivun yläreunassa olevaa hakutoimintoa löytääksesi uudemman version.

Esittely

Apache on hämmästyttävän tehokas ja pätevä verkkopalvelin. Jotta alkuasennus olisi mahdollisimman helppoa, siinä on esiasennettuna useita moduuleja. Tämä tekee siitä loistavan valinnan uusiin projekteihin, kun sinun on nopeasti tuottava. Sivustosi kasvaessa saatat kuitenkin törmätä suorituskykyongelmiin.

DigitalOceanissa minut houkutteli ensin alhainen aloitushinta. Pienimmissä ja halvimmissa pisaroissa on 512 Mt RAM-muistia, mikä ei tunnu paljolta nykypäivän suurten kehysten maailmassa. Olisit kuitenkin yllättynyt, mitä voit tehdä tällaisella pienellä palvelimella, jos käytät vähän aikaa asetusten säätämiseen.

Jos käytät Apachea jollakin pienemmillä pisaroilla tai jos haluat maksimoida suorituskyvyn isompien pisaroiden kanssa, tässä on muutamia asioita, joita sinun tulee tehdä. Käytän esimerkeissä Ubuntu 12.04:ää, mutta esittämäni periaatteet soveltuvat myös muihin Linux-versioihin.

Poista tarpeettomat moduulit

Ubuntu- ja Debian-pohjaisissa järjestelmissä näet kansion nimeltä /etc/apache2/mods-enabled ja kansion nimeltä /etc/apache2/mods-available/. Mods-available-kansio on luettelo kaikista tietylle palvelimelle asennetuista moduuleista, ja mods-enabled on tällä hetkellä aktiiviset moduulit.

VPS:ssäni on oletuksena aktiivisia 17 moduulia. Näitä on liikaa, ja useimpia niistä ei tarvita hakemuksessani. Valitettavasti tarvitsemasi moduulit eivät välttämättä ole täsmälleen selkeitä, koska jotkut ovat riippuvuuksia muista.

Suosittelen tekemään luettelon kaikista tällä hetkellä aktiivisista moduuleista ja tallentamaan se myöhempää tarvetta varten, jos sinun täytyy palata takaisin. Poista sitten moduulit käytöstä yksitellen ja käynnistä Apache uudelleen jokaisen muutoksen jälkeen nähdäksesi, tapahtuuko virheitä.

Ubuntussa ja Debianissa moduuli poistetaan käytöstä komennolla (käyttäen esimerkkinä autoindexiä):

sudo a2dismod autoindex

Jotkin moduulit, jotka vaativat erityisen paljon resursseja ja jotka sinun tulee poistaa käytöstä, jos et tarvitse niitä:

PHPSSLRewritePerlPythonRack / Ruby / Passenger

Useat näistä moduuleista eivät ole oletusarvoisesti käytössä, joten niitä ei ehkä ole otettu käyttöön, ja joissakin tapauksissa ne ovat käytössä, koska todella tarvitset niitä.

Nopea huomautus "uudelleenkirjoittamisesta": Usein tämä moduuli on käytössä, kun "alias"-moduuli itse asiassa toimisi yhtä hyvin. Jos tulet toimeen aliaksen kanssa, poista uudelleenkirjoitus käytöstä. Rewrite on yksi raskaammista moduuleista, mutta se myös täyttää Apachella joitain merkittäviä voimia.

Vaihtaminen "uudelleenkirjoituksesta" "aliakseksi" on edistynyt aihe (jossa on hyödyllisiä dokumentteja). Vaikka et voikaan poistaa uudelleenkirjoitusta kokonaan käytöstä, mutta pystyt muuttamaan osan uudelleenkirjoitussäännöistäsi aliaksiksi, saa etua.

Kun olet poistanut moduulin käytöstä ja lataanut Apache-määritykset uudelleen, voit tarkistaa apachen virhelokista viestejä. Tarkista Ubuntussa ja Debianissa /var/log/apache2/error.log.

Saan virheilmoituksen, joka näyttää tältä:

Syntaksivirhe rivillä 6 /etc/apache2/sites-enabled/site1:Virheellinen komento 'DAVLockDB', ehkä väärin kirjoitettu tai palvelimen määritykseen sisältymättömän moduulin määrittelemä Toiminto 'configtest' epäonnistui.

Tämä tarkoittaa, että moduuli I vain vammainen tarvittiin. Tässä tapauksessa moduuli oli dav_fs, joten otin sen uudelleen käyttöön:

sudo a2enmod dav_fs

Käynnistin sitten Apachen uudelleen ja etsin seuraavaa virhettä. Saattaa kestää useita yrityksiä, ennen kuin saat vähimmäisluettelon kuntoon. Ole kärsivällinen, se on sen arvoista.

Siirrä koodi pois Apachesta

Jos käytät PHP-sivustoa, käytät todennäköisesti kuuluisaa mod_php:tä. Jos käytät rubiinisivustoa, helppo ratkaisu on Passenger Phusion, eli mod_rails tai mod_rack.

Tämän ongelmana on, että kyseisen kielen tulkin C-koodi on upotettu Apacheen, mikä kuluttaa enemmän muistia jokaisella sivun katselukerralla. Jos sivustosi suosittu sivu aiheuttaa 30 HTTP-pyyntöä, yksi niistä koskee dynaamista sivua ja loput 29 ovat todennäköisesti staattisia resursseja, kuten kuvia, css ja javascript. Miksi käyttää paisunutta Apachea niille 29 pyynnölle, jotka eivät tarjoa mitään dynaamista sisältöä?

Ero voi olla dramaattinen. Jos mod_php otetaan käyttöön, se voi käyttää yli 100 megatavua RAM-muistia Apache-alaprosessia kohden! Ottaen huomioon, että oletuksena Apache-palvelimessasi voi olla käynnissä vähintään 25 prosessia, voit nähdä, miksi tästä voi tulla ongelma.

Tässä on joitain työkaluja, joilla voit tehdä tämän:

Tämän muutoksen haittapuoli on, että asioiden saaminen toimimaan on aluksi vaikeampaa. Joissakin tapauksissa dokumentaatio on erittäin hyvä. Muissa tapauksissa yskä php-fpm yskä dokumentaatio on niukkaa.

Yleensä tapahtuu niin, että käynnistetään erityinen palvelinprosessi PHP:lle, Pythonille tai Rubylle, jolloin Apache sen sijaan, että tietäisi vaistomaisesti, kuinka käsitellä näitä pyyntöjä upotetun koodin avulla, vain välittää dynaamisen sisällön kutsun tähän taustaprosessiin.

Tulet hämmästymään, kuinka paljon tällä on merkitystä. Kun poistin mod_php:n virtuaalipalvelimeltani, Apache-prosessieni koko laski 90-120 megatavusta alle 10 megatavuun. Pystyin palvelemaan kaiken dynaamisen sisällön vain kahdella php-taustaprosessilla, jotka käyttivät vain 60 Mt kukin.

Rajoita Apache-prosessien ja -lapsien määrää

Useimpien käyttöjärjestelmien Apache-oletuskokoonpanot eivät sovellu pienille palvelimille – 25 tai enemmän aliprosessia on yleistä. Jos jokainen Apache-alaprosessisi käyttää 120 Mt RAM-muistia, VPS tarvitsee 3 Gt vain Apachea varten.

Yhden vierailijan verkkoselain voi pyytää verkkosivustolta 4 kohdetta kerralla, joten pilvipalvelimesi voi ylikuormittua, jos vain 7 tai 8 henkilöä yrittää ladata sivua samanaikaisesti. Tämä saa verkkosivun roikkumaan jatkuvasti latautuvassa tilassa, mikä näyttää ikuisuudelta.

Palvelin pitää usein nämä kuolleet Apache-prosessit aktiivisina ja yrittää palvella sisältöä kauan sen jälkeen, kun käyttäjä luovutti, mikä vähentää käyttäjien palvelemiseen käytettävissä olevien prosessien määrää ja vähentää käytettävissä olevan järjestelmän RAM-muistin määrää. Tämä aiheuttaa niin sanotun alaspäin suuntautuvan kierteen, joka päättyy huonoon kokemukseen sekä sinulle että sivustosi vierailijoille.

Sinun pitäisi selvittää, kuinka paljon RAM-muistia sovelluksesi tarvitsee, sitten kuinka paljon on jäljellä, ja varata suurin osa siitä Apachelle.

Jos sinulla on esimerkiksi kolme php-fpm-prosessia, jotka käsittelevät dynaamista sisältöä, ja jokainen voi käyttää jopa 70 Mt RAM-muistia ja MySQL-palvelimesi voi käyttää jopa 120 Mt RAM-muistia, joka yhdistää palvelimen käyttämän yhteensä 330 Mt. sovellus. Tämän avulla voit varata noin 150 Mt Apachelle.

Avaa palvelimen yläkomento Apachen ollessa käynnissä. Liitän vähän näkemääsi ja leikkaan pois suurimman osan riveistä, jotka eivät ole asiaankuuluvia:

top -bn 1PID USERPRNIVIRTRESSHR S %CPU %MEMTIME+COMMAND[...]15015 www-data20 0232m 9644 1900 S0.01.6 0:00.02 apache215016 www-data20 0232m .006 apache20 0232m .0:06 ap. che215017 www-data20 0232m 9644 1900 S0.01.6 0:00.02 apache2

Huomaa Apache-alaprosessin RES-sarake ja merkitse muistiin sen RES-arvo. Esimerkiksi virtuaalipalvelimellani, joka on hyvin optimoitu, arvo on 9 644, mikä tarkoittaa, että se ei käytä aivan 10 Mt RAM-muistia. Jos rajoitan Apachen enintään 15 lapsiprosessiin, sen pitäisi olla enintään noin 150 megatavua RAM-muistia.

Muokkaa pilvipalvelimesi apache-määritystiedostoa, joka Ubuntussa ja Debianissa on /etc/apache2/apache2.conf, ja etsi osio mpmpreforkmodule-kokoonpanoa varten. Etsi MaxClients-rivi ja aseta se arvoon 15, tallenna ja käynnistä Apache uudelleen.

Tässä on esimerkki siitä, mitä etsit Ubuntusta:

StartServers3MinSpareServers 3MaxSpareServers 5MaxClients 30MaxRequestsPerChild 0

Näetkö MaxClients-rivi siellä? Meidän on muutettava tämä arvo pienempään numeroon.

Jos VPS ylikuormittuu ja saavuttaa maksimimäärän asiakkaita, joita se voi palvella kerralla, se palvelee niitä ja muut käyttäjät yksinkertaisesti epäonnistuvat nopeasti. He voivat sitten ladata sivun uudelleen ja ehkä menestyä paremmin toisella yrittämällä.

Tämä kuulostaa pahalta, mutta usko minua, on paljon parempi sulkea nämä yhteydet nopeasti mutta jättää palvelin terveeksi sen sijaan, että se roikkuu auki ikuisuuden. Yllättäen voit saada paremman suorituskyvyn palvelimelta, jolla on vähemmän aliprosesseja, mutta joka vastaa nopeammin kuin palvelimella, jossa on enemmän aliprosesseja, joita se ei pysty käsittelemään.

Esimerkiksi hallitsemani Wordpress-sivusto on isännöimä 1 Gt:n dropletissa käyttäen 4 php-fpm-prosessia, ja se pystyy palvelemaan yli 950:tä samanaikaista käyttäjää kerralla. Tämä tarkoittaa huippukapasiteettia, joka on noin 42 miljoonaa sivun katselukertaa päivässä, jos tästä verkkosivustosta tulee koskaan tarpeeksi suosittu!

Harkitse vaihtoehtoista MPM-määritystä

Useimmat Apache-kokoonpanot ovat perinteisesti käyttäneet prefork mpm:ää, joka on säikeen turvallinen ja sopii siksi käytettäväksi PHP:n ja muiden sulautettujen kielten kanssa.

Jos pääset eroon ulkoisista moduuleista, kuten PHP tai Rails, voit harkita työntekijän MPM:ää, joka on usein nopeampi kuin prefork.

Jotta työntekijämoduuli otetaan käyttöön, se on asennettava.

sudo apt-get install apache2-mpm-worker

Joka näyttää sinulle seuraavanlaisen viestin:

Seuraavat paketit POISTETAAN:apache2-mpm-prefork libapache2-mod-php5Seuraavat UUDET paketit asennetaan:apache2-mpm-worker0 päivitetty, 1 äskettäin asennettu, 2 poistettavaa ja 2 ei päivitetä.Tarvitsee 2 284 B arkistoja .Tämän toimenpiteen jälkeen levytilaa vapautuu 8 718 kt.Haluatko jatkaa [Y/n]?

Huomaa, että jos asennat Ubuntussa worker mpm:n, se poistaa prefork mpm:n ja mod_php:n ja muut yhteensopimattomat lisämoduulit.

Tässä olemme keskustelleet neljästä Apache-optimoinnista, joiden pitäisi parantaa sovelluksesi suorituskykyä huomattavasti, vaikka sinulla olisi pieni pisara.

Suosittelen lämpimästi kokeilemaan tätä testipisaralla tuotantopalvelimen sijaan. DigitalOceanin palvelun kauneus on, että voit pyörittää uuden pisaran juuri niin kauan kuin tarvitset muutosten testaamiseen ja sammuttaa sen, kun olet valmis. Tuntikohtaisella laskutuksella se on pieni riski ja edullinen tapa löytää täydellinen kokoonpano VPS:llesi.

Lähettäjä: Matthew Nuzum

PREV: Mitkä ovat virtualisoinnin edut ja haitat?

NEXT: Palvelinvirtualisoinnin kuusi parasta etua - HiTechNectar

Popular Articles

Hot Articles

Navigation Lists

Back to Top