Za nemoteno delovanje vaše spletne strani ali aplikacije je zelo pomembno, da imajo programi (Apache spletni strežnik, MySQL strežnik ipd.) na voljo zadostno količino strežniških sredstev—prostor, RAM, CPU, I/O itn.
V primerih, ko sredstva niso presežena, aplikacije delujejo nemoteno. Čim pa katerega izmed sredstev zmanjka, se v delovanju aplikacij (in celotnega VPS strežnika) lahko pojavijo težave (npr. nedostopnost strani).
Poskrbimo, da poraba strežniških sredstev VPS ne presega zakupljenih količin. S tem bomo zagotovili, da bodo tako VPS strežnik kot tudi vse aplikacije na njem nemoteno delovale.
1 Pregled porabe prostora na strežniku
Eden ključnih strežniških sredstev je prostor, ki je aplikacijam (in operacijskemu sistemu) na voljo. K sreči nam je v sklopu Linux operacijskih sistemov na voljo vrsta ukazov, s katerimi lahko preverimo diskovno zasedenost in ob prekomerni zasedenosti ustrezno ukrepamo.
1.1 Prijava na strežnik
V prvem koraku se prek protokola SSH prijavimo na svoj VPS strežnik. Kot privzeto nas bo sistem postavil v korensko mapo uporabnika (v primeru root dostopa bo to mapa /root).
1.2 Pregled zasedenosti glavnih particij
Sistemi Linux imajo za pregled zasedenosti prostora pripravljen koristen ukaz df (ang. disk filesystem), ki povzame zasedenost prostega in zasedenega prostora na napravi.
# df -h
Zgornji ukaz nam bo izpisal stanje zasedenosti prostora in nam z možnostjo -h (ang. human readable) številke podal v bolj prijazni obliki—kilobajtih, megabajtih, gigabajtih.
Filesystem Size Used Avail Use% Mounted on udev 953M 0 953M 0% /dev tmpfs 194M 712K 194M 1% /run /dev/sda1 19G 2.6G 16G 15% / tmpfs 970M 0 970M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 970M 0 970M 0% /sys/fs/cgroup /dev/sda15 61M 2.7M 58M 5% /boot/efi tmpfs 194M 0 194M 0% /run/user/0
Iz pridobljenega izpisa je razvidno, da je korenska mapa / velika 19 GB in v sebi drži največjo količino podatkov (2,6 GB), kar predstavlja približno 15% zapolnjenost.
1.3 Določanje najbolj obsežnih direktorijev
Na podlagi zgoraj zapisanega nas bi, sploh v primerih prekomerne zasedenosti, zanimalo v kateri mapi, direktoriju, se skriva največja količina datotek in za katere vrste datotek gre. V primeru, da gre za nenujne datoteke (npr. starejše rezervne kopije, neaktualne strežniške zapise ipd.) lahko te navadno odstranimo in s tem sprostimo več GB prostora na strežniku.
# cd /
Z zgornjim ukazom se pomaknemo v korensko (ang. root) mapo, ki je skladno z gornjim izpisom tudi v največji meri zasedena. Z naslednjim ukazom bomo zasedenost posameznih map še nekoliko razdelali.
# du -sh /*
Zgornji ukaz, du (ang. disk usage) se od prejšnjega df razlikuje predvsem v podrobnosti izpisa—ukaz df predstavlja zelo grobo “ptičjo perspektivo” porabe celotnega diskovnega prostora VPS strežnika medtem ko je izpis ukaza du mnogo podrobnejši in se navezuje na zasedenost posameznih map znotraj datotečnega sistema.
0 /proc 76K /root 712K /run 0 /sbin 4.0K /srv 0 /sys 72K /tmp 1.6G /usr 974M /var
Iz pridobljenega izpisa lahko vidimo, da največji del prostora zaseda ravno mapa /usr. Smotrno bi bilo, da si ogledamo še podrobnejšo zasedenost omenjene mape. To preprosto storimo tako, da prejšnjemu du ukazu dodamo lokacijo mape /usr.
# du -sh /usr/*
221M /usr/bin 4.0K /usr/games 11M /usr/include 1.1G /usr/lib 4.0K /usr/lib32 4.0K /usr/lib64 120K /usr/libexec 4.0K /usr/libx32 56K /usr/local 49M /usr/sbin 202M /usr/share 4.0K /usr/src
V našem primeru je najbolj zasedena mapa /usr/lib, velika je približno 1,1 GB. S takim načinom se lahko pomikamo poljubno globoko v posamezne mape, direktorije, in določimo najbolj zasedene mape.
1.4 Izbris odvečnih datotek
Sedaj, ko smo našli najbolj obsežne direktorije, lahko podrobneje preučimo njihovo vsebino in, v kolikor je to možno, odstranimo odvečne datoteke in mape.
POZOR: Nekatere mape s svojimi datotekami, npr. Mapa /bin, /boot ipd. so ključnega pomena za splošno delovanje operacijskega sistema. Pred posegom v te mape (več podrobnosti spodaj) svetujemo, da se dodobra prepričate o potrebnosti omenjenih datotek.
/bin Osnovne binarne datoteke za delovanje sistema /boot Statične datoteke zagonskega programa (ang. boot loader) /dev Datoteke naprave /etc Sistemske nastavitve glede na gostitelja (ang. host) /lib Osnovne deljene knjižnice in moduli jedra (ang. kernel) /media Točka za namestitev odstranljivih medijev /mnt Točka za namestitev začasnega datotečnega sistema /opt Programski paketki za razne dodatke /sbin Ključni sistemske binarne datoteke /srv Podatki za storitve, ki jih potrebuje sistem /tmp Začasne datoteke /usr Sekundarna hierarhija /var Spremenljivi podatki (npr. lokalno predpomnjenje)
Po izbrisu odvečnih datotek lahko zasedenost prostora spremljamo s katerim izmed zgoraj-predstavljenih ukazov, npr. df.
2 Spremljanje strežniških sredstev
V prejšnjem poglavju smo si ogledali možnosti spremljanja in analize zasedenosti prostora na nivoju celotnega VPS strežnika in za posamezne direktorije na njem. V tem razdelku se bomo srečali z možnostmi spremljanja preostalih strežniških sredstev, npr. RAM, CPU idr.
# top
Najenostavnejši način spremljanja trenutnih delujočih procesov je uporaba gornjega ukaza, top. Slednji izpiše stalno spreminjajoč se seznam tekočih procesov in jih razvrsti glede na CPU aktivnost posameznega procesa.
top - 12:50:49 up 4 days, 23 min, 1 user, load average: 0.07, 0.02, 0.00 Tasks: 95 total, 3 running, 92 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 1939.7 total, 121.4 free, 359.2 used, 1459.1 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 1350.1 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 29665 varnish+ 20 0 86552 1260 1084 R 0.7 0.1 15:14.47 varnishncsa 1 root 20 0 170576 12736 8272 S 0.0 0.6 0:15.17 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.04 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd 9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
2.1 Ukaz top
Zavoljo boljšega poznavanja prikaza podatkov z ukazom top je spodaj na voljo razpredelnica z najbolj osnovnimi informacijami.
Vrstica | Polje | Pomen |
1 | top | Ime programa (ukaza) |
12:50:49 | Trenutni čas | |
up 4 days, 23 min | Čas od kar je bila naprava zadnjič ponovno zagnana (ang. uptime) | |
1 user | Število vpisanih uporabnikov | |
load average: 0.07, 0.02, 0.00 | Load average se nanaša na število procesov, ki čakajo na izvršitev, t.j. število procesov, ki so aktivni in si delijo CPU. Vsaka izmed treh vrednosti predstavlja različen časovni interval; 60 s, 5 min in 15 min. Vrednosti pod 1.0 pomenijo, da naprava ni (pre)obremenjena. | |
2 | Tasks: | Označuje število procesov in njihovo stanje |
0.3 us | Procent [%] CPU, rabljen za uporabnikove procese t.j. procese izven jedra (kernel) | |
0.3 sy | Procent [%] CPU, rabljen za procese jedra (kernel) | |
0.0 ni | Procent [%] CPU, rabljen s strani “nice” procesov—procesov z nizko prioriteto | |
99.3 id | Procent [%] CPU, ki ni v uporabi | |
0.0 wa | Procent [%] CPU, ki čaka na I/O | |
3 | Mem: | Prikaže koriščenje RAM |
4 | Swap: | Prikaže koriščenje “swap” navideznega pomnilnika |
Program top razpolaga z več uporabnimi ukazi, najpomembnejša sta h (za prikaz pomoči pri uporabi programa) in seveda q za izhod iz vizualnega prikaza porabe sredstev.
V izrisani tabeli, ki se stalno spreminja, lahko zaznamo procese, ki zahtevajo večjo količino strežniških sredstev—v našem primeru lahko pod drobnogled vzamemo proces 29665 (stolpec PID):
Stolpec | Pomen |
PID | Edinstvena številka procesa (process ID) |
USER | Uporabnik, ki je spožil proces |
PR | Predstavlja koliko deljenega spomina koristi proces |
NI | (ang. Nice value) predstavlja prioriteto procesa; negativna vrednost predstavlja višjo prioriteto, pozitivna nižjo |
VIRT | Skupno navideznega spomina, ki ga proces terja |
RES | Količina fizičnega pomnilnika (ki ni swap) katerega koristi proces |
SHR | Količina deljenega pomnilnika, ki ga proces koristi |
%CPU | Koliko CPU proces trenutno koristi |
%MEM | Koliko fizičnega pomnilnika proces trenutno koristi |
TIME+ | Koliko časa proces koristi CPU |
COMMAND | Kateri ukaz je proces pognal (sprožil) |
Ko najdemo “podivjani” proces, npr. neustrezen PHP proces, katerega je potrebno zaustaviti (v našem primeru bomo zavoljo prikaza “ubili” proces varnish), ga lahko zaustavimo (“ubijemo”, ang. “kill”) z ukazom kill.
# kill 29665
V zgornjem primeru se številka 29665 nanaša na PID t.j. unikatno številko procesa, ki smo jo pridobili iz zgornje tabele.
POZOR: Tudi na tem mestu je vredno poudariti, da zaustavitev sistemskih procesov lahko negativno vpliva na delovanje celotnega VPS strežnika in lahko povzroči težave v delovanju spletnih aplikacij na strežniku.
V primeru, ko dotični proces ni “podivjan” marveč za svoje delovanje potrebuje le večji nabor strežniških sredstev, svetujemo nadgradnjo VPS strežnika.