Edelliseen tehtävään Etusivulle

Anna Kröger 2020-03-19

Prosessinhallintaa ja lokeja

Tämä on Tero Karvisen Linux palvelimet -kurssin kahdeksannen tehtävän raportti. Tässä linkki kurssisivulle.

Tehtävänanto (h8):

a) Kuormitusta yli ajan. Tietysti palvelin hidastelee juuri silloin, kun olet nukkumassa. Seuraisipa joku kuormitusta tuolloin. Asenna heti aluksi jokin ohjelma seuraamaan kuormitusta, jotta voit tarkastella sitä koko tehtävän ajalta. Sopivia ohjelmia ovat esimerkiksi 'munin' ja sysstat ('sar').

b) Kuormita järjestelmän eri osa-alueita. Esim. 'stress'. Etsi prosessi toisesta ikkunasta 'top' tai 'htop', järjestystä voi vaihtaa "P" ja "M". Kokeile käytännössä, selitä ja analysoi. Muista selittää, mitä komennolla halutaan selvittää ja tulkitse kokeilusi tulokset. Aiheuta tarvittaessa kuormaa tai muuta työkalulla näkyvää tulkittavaa.

c) iotop; iotop -oa

d) dstat

e) ss --listening --tcp --numeric; ss --listening --tcp; ss --tcp; ss --listening --udp; ss --listening --udp;

f) grep -i error /var/log/syslog; grep -ir error /var/log/

g) Load average näkyy esim 'uptime', 'top', 'htop'. Prosessoriydinten määrä näkyy 'nproc'. Miten load average tulkitaan? Miksi prosessoriydinten määrä on tässä kiinnostava? Vapaaehtoisena bonuksena voit miettiä, mitä hyötyä on kuormituslukemasta, joka voi mennä yli yhden eli yli 100%.

h) Analysoi lopuksi koko ajalta keräämäsi kuormitustiedot. Löydätkö esimerkiksi aiheuttamasi kuormituspiikin?


Sysstat asennus

Koska tehtävänannossa on kyse nimenomaan palvelimen hidastelusta, aloitin asentamalla apachen. Sen lisäksi laitoin palomuurin päälle ja tein siihen reiän.

$ sudo apt-get -y install apache2

$ sudo ufw enable

$ sudo ufw allow 80/tcp

Selaimesta tarkistin, että asennus toimi (etusivu näkyi), joten aikaisempien tehtävien mukaan vaihdoin etusivun.

$ echo "Apachen etusivu" | sudo tee /var/www/html/index.html

Seuraavaksi piti asentaa jokin kuormitusta seuraava ohjelma. Aloitin tutustumalla sysstat-ohjelmaan. Löysin siihen kaksi eri ohjetta:
1. https://www.crybit.com/sysstat-sar-on-ubuntu-debian/
2. https://tecadmin.net/sysstat-monitor-linux-system-performance/
Seurasin lähinnä ensimmäistä ohjetta, mutta tarkistin kaiken aina myös toistesta.
Ensin asensin ohjelman.

$ sudo apt-get install sysstat

Jotta se kuitenkin toimisi, piti vielä muuttaa vielä yhtä ohjelman asetusta.

$ sudoedit /etc/default/sysstat

Sielä piti muuttaa ENABLED kohta "false"n sijaan "true"ksi. Ohjeiden mukaan muutin myös tietojenkeräyksen aikaväliä 10 minuutista kahteen minuuttiin.

$ sudoedit /etc/cron.d/sysstat

Tämän jälkeen käynnistin ohjelman. Siihen osa näistä kolmesta komennosta oli varmasti turha, mutta koska seurasin kahta eri ohjetta, tein varmuuden vuoksi kaikki kolme.

$ sudo systemctl restart sysstat

$ sudo systemctl enable sysstat

$ sudo systemctl start sysstat

Tässä vaiheessa tarkistin vielä, että ohjelma myös varmasti toimi. Sen tein testaamalla ensimmäisen ohjeen lopussa olevia komentoja (esim. sar -u).

Kuormita järjestelmää

Kaikki näytti toimivan, joten siirryin testaamaan tehtävänannossa annettuja komentoja. Aloitin sillä, että tutustuin htop:iin. Kokeilin sen toimintaa ja totesin, että tarvitsen apua sen ymmärtämiseen ja tulkitsemiseen. Löysin siihen todella selkeät ohjeet: https://www.deonsworld.co.za/2012/12/20/understanding-and-using-htop-monitor-system-resources/. Tämän avulla uskoin voivani tulkita tilannetta, vaikka en olekaan ennen pahemmin ollut näiden juttujen kanssa tekemisissä. (Kaikkea en onnistunut sellaisenaan tulkitsemaan, joten kysyin asiasta tietävältä tutulta apua.)
Leikin hetken aikaa ohjelmilla ymmärtääkseni paremmin niiden toimintaa.

Kuvissa siis kokeilen ensin stressillä --cpu 5 ja sen jälkeen --cpu 1. Htopista näkyi, että minulla on koneeni prosessorissa neljä ydintä. Mitä enemmän kuormitusta prosessorille laitoin, sitä enemmän otettiin ytimiä käyttöön. Testatessani --io 2 komentoa, en huomannut htopissa mitään eroa (prosessorin kuormituksen lisäksi), kuin että oikealla ylhäällä taskien määrä muuttui "1 running" sijaan "3 running". Tätä varten: iotop. Tai no, niin ainakin luulin. Iotop seuraa I/O:n käyttöä (eli Input/Output eli Wikipedian mukaan suomeksi "siirräntä"). Kuitenkin, vaikka avasin sen ja ajoin uudelleen, niin mitään merkittäviä muutoksia en siellä silti huomannut. Vaikka lisäsin kuormitusta vielä sitäkin enemmän, mitään ei tuntunut tapahtuvan. Jostain syystä iotop näyttin minulle koko ajan samaa, ihan sama mitä tein. (Tämä siis sekä pelkästään komennolla iotop ja komennolla iotop -oa (jossa -o siis --only eli näyttää vain ne prosessit jotka aidosti käyttävät I/O, ja jossa -a eli --accumulated näyttää prosessien summan kaistan sijaan ). (Lisäys: pidin tauon, jonka aikana katsoin videoita yms. Samalla pidin auki iotopin. Selainta käyttäessä huomasin aina välillä siirrännässä pieniä piikkejä).

Seuraavaksi kokeilin komentoa dstat, jonka tarkoitus on näyttää kaikki laitteen resurssit. Kuvasta näkyy selkeä kohta (10s eli kymmennen riviä), jossa lisäsin kuormitusta komennolla

$ stress --cpu 1 --io 1 -- vm 1 --vm-bytes 64M --timeout 10s

ss -komento

Seuraavaksi ajoin komennon

$ ss –listening –tcp –numeric; ss –listening –tcp; ss –tcp; ss –listening –udp; ss –listening –udp;

Vaikka en ymmärrtänytkään kaikkia asioita joita näkyi, niin ainakin siellä oli koneeni osoite ja portti ja esimerkiksi portti 80. Hieman ss-komentoa Googlettaessa luin, että se sillä voi esimerkiksi katsoa kaikkia "kuuntelevia" (oletan sen tarkoittavan jonkin sortin valmiustilaa tai vastaavaa) IPv4 portteja, yhteydessä olevia IP-osoitteita ja paljon muuta.

Erroreiden tulkintaa

Seuraavaksi luin lokeja komennolla

$ grep -i error /var/log/syslog; grep -ir error /var/log/

Katsellesani lokeja, en rehellisesti nähnyt siellä mitään, mistä olisin jo valmiiksi tiennyt mitä se tarkoittaa. Siellä kuitenkin näkyi kaksi virhettä useimmin, joista ensimmäinen (ihan kuvan yläreunasta alkaen) oli "Corrected error" ja "severity=Corrected". Löysin tästä virheestä keskustelua, jossa sanottiin, että asia ei ole mitenkään vakava, mutta löysin sieltä kuitenkin myös ohjeet, kuinka sen halutessaan voisi ehkä korjata. Lähde. (En kuitenkaan niin tehnyt, koska olin jo tässä erroreiden tulkitsemisvaiheessa ehtinyt sulkea koneen).
Toinen toistuva virhe taas oli kuvassa alempana, jossa on "systemd-resolved". Tästä samaisesta virheestä löysin kommentin
"This warning is logged by systemd-resolved, whenever a name can not be resolved by the DNS system (e.g. nslookup www.kjfoiqaefah34876asdf.com). This can be tolerated and is no reason to be alarmed. This is no error and nothing needs to be fixed." Lähde

Load average ja prosessoriytimet

Syötin komennot 'uptime' ja 'nproc'.

Uptimellia näkyi ensimmäisenä tämähetkinen kellonaika (joka tosin on väärä, koska käytän livetikkua) sekä se, kuinka pitkään kone on nyt ollut käynnissä. Käyttäjien määrä (eli 1 user) jälkeen, oli oleellisin tieto. Load averagessa on kolme numeroa, joista ensimmäinen on keskiarvoinen kuormitus viimeisimmän yhden minuutin aikana, toinen viimeisimmän viiden minuutin aikana ja kolmas viimeisimmän 15 minuutin aikana. Kuormituksessa siis numero 1 tarkoittaa sataa prosenttia.

Nproc komento näyttää prosessoriydinten määrän. Tätä pohdin jo hieman aikaisemmin tehtävässä. Teoriassa ytimien konkreettisella määrällä ei ole niin suurta merkitystä, riippuen toki siitä mitä ohjelmaa / ohjelmia käyttää. Kiinnostavampi osuus niissä on se, kuinka niitä käytetään. Aikaisemmin jo totesin siitä, kuinka kuormitusta lisätessä näin, että enemmän ytimiä otettiin käyttöön. Seuraava ydin otettiin käyttöön vasta, kun jo käytössä oleva oli kuormitukseltaan 100 %. Ymmärtääkseni kuitenkin jotkut ohjelmat kykenevät käyttämään myös useampaa ydintä samanaikaisesti, mikä siis vähentää prosessorin kuormitusta. Tämä taas voi eri tilanteissa esimerkiksi nopeuttaa prosesseja ja yhteyksiä jne.

"Vapaaehtoisena bonuksena voit miettiä, mitä hyötyä on kuormituslukemasta, joka voi mennä yli yhden eli yli 100%."

Jos kuormituslukema menee yli yhden, tarkoittaa se sitä että kuormituksen kohde on ylikuormittunut. Hyötynä tässä näkisin itse ainakin vianmäärityksen ja esimerkiksi ohjelmia tehdessä debuggaamisen. Jos jokin asia on ylikuormittunut, tarkoittaa se sitä, että jossakin on joko jotain vikaa tai jokin ei muusta syystä toimi oikein.

Kerätyt kuormitustiedot...

Tässä vaiheessa oli hyvä huomata, että jotta koko ajalta olisi kuormitustietoja, olisi ne pitänyt alusta asti ottaa talteen. Itse kun oletin, että alussa ladatun ohjelman (syssat) käynnistäessä, se automaattisesti pitäisi jotakin kirjaa kuormituksesta. Lähin komento, jonka asiaan liittyen löysin oli sar, mutta se näytti minulle jostain syystä vain viimeisen 40min asiat (tämä saattaa johtua siitä, että vuorokausi vaihtui silloin). Niistä viimeisimmistä 40min en kuitenkaan mitään piikkiä löytänyt, mutta olinkini toisaalta silloin ollut lähinnä kirjoittamassa tätä raporttia toisella koneella.


Käyttämäni lähteet

Karvinen, Tero: kevät 2020, Linux palvelimet -kurssi
http://terokarvinen.com/2020/linux-palvelimet-2020-alkukevat-kurssi-ict4tn021-3010/

Rahul: 2019-08-09, How to Monitor Linux System Performance with Sysstat
https://tecadmin.net/sysstat-monitor-linux-system-performance/

Arunlal Ashok: 2019-02-15, Simple steps to install and configure sar (sysstat) on Ubuntu/Debian servers
https://www.crybit.com/sysstat-sar-on-ubuntu-debian/

Linux.com Editorial Staff: 2019-01-22, An Introduction To The Ss Command
https://www.linux.com/topic/networking/introduction-ss-command/