Omejitve virov CloudLinux

CloudLinux Branje: 9 min

CloudLinux OS zna omejiti in podpira omejevanje naslednjih virov:

Omejitev Enota Privzeta vrednost Opis
SPEED % enega jedra ali Hz 100% Omejitev hitrosti CPU glede na eno jedro ali v Hz.
PMEM KB 1024MB Omejitev fizičnega pomnilnika (RSS v ps/RES v top). Vključuje tudi deljeni pomnilnik in diskovni predpomnilnik
VMEM1 KB 0 Omejitev navideznega pomnilnika (VSZ v izpisu ps ali VIRT v izpisu top)
IO KB/s 1024KB/s Hitrost IO: kombinacija operacij branja in pisanja
IOPS operacij/sekundo 1024 Omeji število operacij branja/pisanja na sekundo.
NPROC kos 100 Največje število procesov znotraj LVE
EP kos 20 Omejitev vstopnih procesov. Običajno pomeni največje število hkratnih povezav do dinamičnih skript Apache ter do SSH in hkrati tekočih opravil cron.

Spodaj najdeš priporočila za tipične nastavitve deljenega gostovanja. Priporočila niso odvisna od zmogljivosti strežnika. Odvisna so le od tega, kako “hitre” želiš, da so tvoji računi gostovanja.

Omejitev Povprečen račun gostovanja Zmogljivejši račun
SPEED 100% 200%
PMEM 1GB 2GB
VMEM 0 0
IO 1024 KB/s 4096 KB/s
IOPS 1024 1024
NPROC 100 150
EP 20 40

Infografika: omejitve CloudLinux (CPU, EP, PMEM, NPROC, IO, inode) in napake, ki jih povzročajo

Razlaga omejitev

LVE je tehnologija na ravni jedra, ki jo je razvila ekipa CloudLinux. Tehnologija ima skupne korenine z virtualizacijo na osnovi vsebnikov, v najnovejši različici pa uporablja cgroups. Je lahka in pregledna. Cilj LVE je, da nobena posamezna spletna stran ne more ustaviti tvojega spletnega strežnika.

Brez LVE lahko že ena sama spletna stran porabi vse vire CPU, IO, pomnilnika ali procese Apache in ustavi strežnik. LVE to prepreči. To dosežejo modul Apache, modul PAM in jedro s skupnim delovanjem.

mod_hostinglimits je modul Apache, ki:

  • zazna VirtualHost, s katerega je prišla zahteva;
  • prepozna, ali je bila namenjena skripti CGI ali PHP;
  • proces Apache, uporabljen za streženje zahteve, za uporabnika, določenega z direktivo SuexecUserGroup za ta navidezni gostitelj, postavi v LVE;
  • pusti Apacheju, da postreže zahtevo;
  • odstrani proces Apache iz uporabnikovega LVE.

Jedro poskrbi, da vsak LVE dobi pravičen delež virov strežnika in da nobena stranka ne more porabiti več, kot dovoljujejo omejitve, nastavljene zanjo. Omejiti je mogoče CPU, pomnilnik (navidezni in fizični), IO, število procesov ter število vstopnih procesov (hkratnih povezav do Apacheja).

Vsak LVE omeji število vstopnih procesov (procesov Apache, ki vstopijo v LVE), da ena sama spletna stran ne bi izčrpala vseh procesov Apache. Ko je meja dosežena, mod_hostinglimits ne more več postaviti procesa Apache v LVE in vrne kodo napake 508. Tako se zelo obremenjene spletne strani upočasnijo in začnejo vračati napake 508, ne da bi to vplivalo na druge uporabnike.

  • Če spletno stran omejuje CPU ali IO, se bo odzivala počasneje.
  • Če spletno stran omejuje pomnilnik ali število procesov, bo uporabnik dobil napako 500 ali 503, ker strežnik ne more izvesti skripte.

Preverjanje namestitve LVE

Za uporabo LVE potrebuješ nameščeno jedro CloudLinux OS Shared in naložen modul LVE. Jedro lahko preveriš z naslednjim ukazom:

uname -r

Videti bi moral nekaj takega kot 4.18.0-425.3.1.lve.1.el8.x86_64. V imenu jedra mora biti lve. Če želiš preveriti, ali je modul jedra lve naložen, zaženi naslednje:

$ lsmod|grep lve
kmodlve             34320384  11

Nastavitev omejitev LVE

Vrednosti LVE najlaže preveriš z upraviteljem LVE v svoji priljubljeni nadzorni plošči (npr. cPanel). Za upravljanje omejitev lahko uporabiš tudi orodje ukazne vrstice lvectl. Omejitve se shranijo v datoteko /etc/container/ve.cfg.

<?xml version="1.0" ?>
<lveconfig>
 <defaults>
         <cpu limit="25"/>
         <ncpu limit="1"/>
         <io limit="1024"/>
         <mem limit="262144"/>
         <other maxentryprocs="200"/>
         <pmem limit="262144"/>
         <nproc limit="0"/>
 </defaults>
 <lve id="532">
         <cpu limit="30"/>
         <ncpu limit="5"/>
 </lve>
</lveconfig>

Zgornje vrednosti za vse LVE nastavijo omejitev CPU na 25 %, omejitev IO na 1024KB/s, omejitev navideznega pomnilnika na 1GB (omejitev pomnilnika je nastavljena kot število strani po 4096 bajtov, zato je treba vrednost pomnožiti s 4096), omejitev fizičnega pomnilnika na 1GB, število jeder CPU na LVE na 1, največje število vstopnih procesov na 200, števila procesov pa ne omejijo. Za LVE z identifikatorjem 532 nastavijo omejitev CPU na 30 % in 5 jeder CPU.

Opomba: Omejitvi CPU (cpu) in jeder CPU (ncpu) v primeru sta zastareli, namesto njiju se uporablja omejitev SPEED.

Omejitev SPEED

Omejitev CPU SPEED omogoča nastavitev omejitve CPU v % enega jedra ali kot fiksno vrednost v Hz.

--speed=XX% nastavi zmogljivost glede na eno jedro.

Na primer:

  • –speed=50% pomeni 1/2 jedra CPU.
  • –speed=100% pomeni 1 jedro,
  • –speed=150% pomeni 1,5 jedra.
  • –speed=XXmhz samodejno zazna hitrost CPU posameznih jeder in nastavi razporejevalnik CPU tako, da uporabnik te meje ne more preseči.

Na primer pri CPU z 1ghz nastavitev –speed=2ghz pomeni 2 jedri, pri CPU s 4ghz pa enaka nastavitev pomeni 1/2 jedra.

Tako lahko ponudniki gostovanja z eno samo nastavitvijo na različni strojni opremi nastavijo približno enake omejitve zmogljivosti.

Opomba: Močno priporočamo, da omejitev hitrosti CPU ne nastaviš pod 100 %. Takšne omejitve namreč povzročajo preklapljanje konteksta CPU, kar poveča vrednost %sys.

Omejitev fizičnega pomnilnika

Omejitev fizičnega pomnilnika ustreza količini pomnilnika, ki ga procesi končnega uporabnika dejansko uporabljajo. Porabo fizičnega pomnilnika posameznih procesov vidiš v stolpcu RES v izpisu ukaza top. Ker si podobni procesi (na primer PHP) delijo veliko pomnilnika, je poraba fizičnega pomnilnika pogosto precej nižja od porabe navideznega pomnilnika.

Poleg tega fizični pomnilnik vključuje deljeni pomnilnik, ki ga uporablja stranka, in diskovni predpomnilnik. Pri diskovnem predpomnilniku velja: če uporabniku začne primanjkovati fizičnega pomnilnika, se pomnilnik, uporabljen za diskovni predpomnilnik, sprosti, ne da bi to povzročilo napake pomnilnika.

Ko LVE preseže mejo fizičnega pomnilnika, CloudLinux OS Shared najprej sprosti pomnilnik, uporabljen za diskovni predpomnilnik, če to ne zadošča, pa ustavi nekaj procesov znotraj tega LVE in poveča števec fPMEM. To običajno povzroči, da spletni strežnik vrača napake 500 in 503. Omejitev fizičnega pomnilnika je pri deljenem gostovanju veliko boljši način omejevanja pomnilnika.

IO

Omejitve IO omejujejo zmogljivost dostopa stranke do diska. Podane so v KB/s. Ko je meja dosežena, se procesi zavrejo (postavijo v stanje mirovanja). Tako procesi znotraj LVE ne morejo preseči omejitve. Kljub temu ne prenehajo delovati in se ne ustavijo, le delajo počasneje, ko dosežejo omejitev.

Omejitve IO vplivajo le na diskovni IO, na omrežje nimajo vpliva. Prav tako ne upoštevajo dostopov do diskovnega predpomnilnika. Tudi če se datoteka 1000-krat naloži iz diskovnega predpomnilnika, se to ne šteje v omejitve IO.

IOPS

Omejitve IOPS omejujejo skupno število operacij branja/pisanja na sekundo. Ko je meja dosežena, se operacije branja/pisanja ustavijo do konca tekoče sekunde.

Vstopni procesi

Omejitev “vstopnih procesov” (Entry processes) uravnava število vstopov v LVE. Vsakič, ko proces “vstopi” v LVE, se števec poveča, ko izstopi, pa zmanjša. Procesi, ustvarjeni znotraj LVE, se ne štejejo. Ta omejitev je znana tudi kot omejitev “Apache concurrent connections” (hkratne povezave Apache).

Proces vstopi v LVE, ko za CGI/PHP prispe nova zahteva HTTP.

Ta omejitev je bila uvedena za preprečevanje napadov DoS na spletni strežnik. Eden precej priljubljenih napadov je zasedanje vseh povezav Apache z dostopanjem do kakšne počasne strani na strežniku. Ko so vsa mesta Apache zasedena, se nihče drug ne more povezati s spletnim strežnikom, zato je videti, kot da ne deluje. Težavo še poslabšajo omejitve CPU: če se stran zaradi omejitve CPU začne upočasnjevati, se na zahteve odziva vedno počasneje, kar zasede vedno več povezav.

Za rešitev tega je bila uvedena omejitev vstopnih procesov (pogosto imenovanih vzporedne povezave). Ta omeji število hkratnih povezav do Apacheja, zato spletni strežnik vrne stran z napako 508 (Resource Limit Reached), takoj ko število hkratnih zahtev do spletne strani preseže omejitev.

Pri delu s spletnim strežnikom LiteSpeed je omejitev vstopnih procesov izvedena drugače kot v Apacheju.

Zato je lahko pri enaki obremenitvi s hkratnimi zahtevami za Apache in LiteSpeed omejitev vstopnih procesov odvisno od spletnega strežnika različna.

Pri LiteSpeedu omejitev Entry processes narašča s številom glavnih procesov lsphp; na primer v načinu delovne skupine spletni strežnik zažene le en glavni proces lsphp, ta pa za obdelavo zahtev ustvari podrejene procese, ne da bi se omejitev Entry processes povečala.

Če želiš omejitev hkratnih povezav nastaviti z LiteSpeedom, lahko uporabiš standardna orodja spletnega strežnika, na primer https://docs.litespeedtech.com/cp/cpanel/antiddos/#connection-throttling.

Število procesov

NPROC uravnava skupno število procesov in niti znotraj LVE. Ko je omejitev dosežena, ni mogoče ustvariti novega procesa (dokler se kakšen drug ne konča). Ko se to zgodi, se števec NPROC poveča. Apache lahko v takem primeru vrne napako 500 ali 503.

Inodi

Razširitev omejitev inode v LVE Managerju strankam omogoča nastavitev omejitev inode. Inode je podatkovna struktura datotečnega sistema, v kateri so shranjeni podatki o datoteki ali mapi. Število inodov pove, koliko datotek in map je v računu. Omejitev inode deluje na ravni diskovne kvote in bo omogočena le na particiji /home. Funkcija je na voljo v nadzornih ploščah cPanel, Plesk in DirectAdmin.

LVE Manager omogoča nastavitev mehke in trde omejitve inode.

  • Trda omejitev uporabniku prepreči pisanje podatkov na disk.
  • Mehko omejitev je mogoče določen čas preseči. Odlog je privzeto sedem dni in ga je mogoče spremeniti z ukazom edquota -t. Po izteku odloga uporabnik ne more ustvariti novih datotek.

Omejitve inode se v LVE Managerju nastavljajo enako kot vse druge omejitve LVE.

Matrika združljivosti

Spletni strežnik / PHP CPU Navidezni in fizični RAM EP NPROC IO CageFS PHP Selector
Apache / suPHP Da Da Da Da Da Da Da
Apache / FCGID Da Da Da Da Da Da Da
Apache / CGI Da Da Da Da Da Da Da
Apache / PHP-FPM Da2 Da Da Da Da Da2 Ne
Apache / mod_php (DSO) Da Ne Da Da Da Ne Ne
Apache / mod_ruid2 Da Ne Da Da Da Ne Ne
Apache / MPM ITK Da Ne Da Da Da Da3 Ne
LiteSpeed Da Da Da Da Da Da Da
NGINX / PHP-FPM Da2 Da Ne Da Da Da Ne
SSH Da Da Da Da Da Da2 Da
Cron Da Da Da Da Da Da Da
Apache / mod_lsapi Da Da Da Da Da Da Da

Opomba: Upoštevaj, da mod_lsapi ne deluje, če je omogočen php-fpm, saj je php-fpm prav tako upravljavec PHP kot mod_lsapi.

Opomba: mod_lsapi je modul Apache, LiteSpeed pa je samostojna rešitev in ne uporablja nobenega modula Apache (saj ima za te module lastno izvedbo). Poleg tega je priporočljivo konfiguracijo Apacheja pustiti nespremenjeno za primer, da bi se odločil vrniti z LiteSpeeda.

  1. Vedno je bolje, da omejitve VMEM v sistemu povsem onemogočiš (nastaviš na 0), ker je to zastarela nastavitev in lahko povzroči nepričakovane napake. ↩

  2. Binarne datoteke PHP iz virov, ki niso DirectAdmin/CloudLinux OS, je treba znova prevesti s popravki CloudLinux. ↩ ↩2 ↩3 ↩4

  3. Potrebna je popravljena različica MPM-ITK. RPM httpd CL vsebuje delavca ITK skupaj s spremembo. ↩

Nazaj: CloudLinux – članki (16)