# Ubuntu: Linux voor mensen/Processen/Wat kan ik doen?
## Algemene bedenkingen

Een uitgebreide werkomgeving, zoals bijvoorbeeld een bureaublad waarop je veel extra toeters en bellen ingesteld hebt, kan je werk vertragen. Vooral als je niet elk jaar een nieuwe computer wilt kopen, is bescheidenheid hier een deugd.
In de tekstomgeving kunnen variabelen en paden (zie lespakket 3) die verkeerd ingesteld zijn ervoor zorgen dat het systeem er langer over doet om opdrachten en bestanden te vinden.

## Prioriteit

Sommige taken, waarvan het geen rol speelt of ze nu supersnel of aan normale snelheid uitgevoerd worden, zullen toch standaard opstarten met een hoge prioriteit, en zo andere processen beletten om een redelijk aandeel van de processorcyclussen te gebruiken.
De prioriteit van een proces wordt aangeduid met een nice nummer (van het Engels: aardig, vriendelijk). Een programma met een hoog nice nummer is vriendelijker voor het systeem en zal andere processen ook de kans geven om cycli op de processor te gebruiken. Een laag nice nummer daarentegen betekent dat het proces egoïstisch is en zo veel mogelijk cycli voor zichzelf houdt.
De prioriteit van een proces aanpassen is enkel nuttig voor processen die veel processorkracht gebruiken, zoals bijvoorbeeld rekentoepassingen en compilers. Processen die veel I/O operaties doen worden automatisch beloond door het systeem en krijgen een hogere prioriteit - en dus een lager nice nummer. Input via het toetsenbord, bijvoorbeeld, krijgt altijd de hoogste prioriteit.
* Compiler
* Een compiler is het programma dat geschreven code omzet naar een programma dat door de processor uitgelezen kan worden.
* I/O
* I/O staat voor Input/Output. Hiermee wordt bedoeld de datastromen van en naar de processor, bijvoorbeeld wanneer de processor een proces uit de wachtrij in het geheugen uitleest (zie de paragraaf Het top commando).
De prioriteit van een programma instellen afwijkend van de standaardwaarde doe je met het nice commando. Maar meestal zal je merken dat een programma, dat al aan het draaien is, teveel belasting veroorzaakt voor de processor. Om de prioriteit aan te passen zonder het proces te onderbreken, gebruik je renice. Gezien we in deze cursus geen processen opstarten die zodanig veel belasting veroorzaken dat de prioriteit ervan veranderd moet worden, gaan we niet verder in op het gebruik van deze commando's. Dit commando wordt meestal ook door systeembeheerders gebruikt, wanneer gewone gebruikers teveel resources van het systeem in beslag nemen. Lees de man pages mocht je ze nodig hebben, bijvoorbeeld op de servers op het werk.
* Interactieve programma's
* Onthoud dat het geen goed idee is om een interaktief programma van prioriteit te veranderen, of dat te doen bij een proces dat in de voorgrond draait.

## CPU verbruik

Zoals we reeds zagen, zijn er op een Linuxsysteem altijd meerdere programma's die de processor(en) gelijktijdig willen gebruiken, ook al ben je de enige gebruiker van het systeem. Elk programma heeft een zeker aantal CPU-cycli nodig om te kunnen werken. Het kan dus gebeuren dat er niet genoeg cycli zijn omdat de processor te druk bezig is. Het uptime geeft niet echt nauwkeurige informatie, je moet weten wat normaal is op je systeem om de waarden van de gemiddelden te kunnen interpreteren. Er zijn een aantal zaken die je kan uitproberen wanneer je vermoedt dat de processor de vertragende faktor is:
* Start zware programma's wanneer de belasting laag is, bijvoorbeeld 's nachts. Zie de volgende sektie voor meer informatie over automatische uitvoering van taken.
* Voorkom dat het systeem onnodig werk doet: stop programma's en diensten die je niet gebruikt, gebruik locate in plaats van find, enzovoorts.
* Draai zware taken met een lage prioriteit.
Als geen van deze oplossingen een optie is op jouw systeem, dan moet je misschien overwegen om de CPU te vervangen door een sneller model. Geheugen
Wanneer een draaiend proces meer geheugen verwacht dan er fysisch beschikbaar is, zal het Linuxsysteem niet stilvallen of op een andere manier falen. In plaats daarvan begint het te swappen (letterlijk van het Engels to swap, omwisselen): de inhoud van het fysische geheugen wordt gecopieerd naar een locatie op de harde schijf, zodat er ruimte vrijkomt om om meer processen te bedienen. Deze manier van werken vertraagt het systeem natuurlijk enorm, want de toegang naar schijven is honderden of zelfs duizenden keren trager dan de toegang naar het geheugen. Het top commando kan gebruikt worden om informatie te geven over de beschikbare ruimte om te swappen (zie de paragraaf Het top commando?). Bij voorkeur komt swappen niet of slechts heel weinig voor.
Probeer het volgende wanneer je ziet dat je machine veel swapt:
* Stop, kill of renice de grootste geheugenvreters. Zie de paragraaf Processen onderbreken voor meer over het kill commando om processen te onderbreken.
* Voeg meer geheugen toe.
* Verfijn de instellingen van het systeem. Dit gaat echter verder dan het onderwerp van deze cursus, tuning is een taak voor systeembeheerders.

## I/O verbruik
### Analyseprogramma's

Hoewel I/O limieten systeembeheerders veel hoofdbrekens kunnen bezorgen, zijn er op Linux niet echt handige gereedschappen om de I/O performantie te meten. Het meest gebruikt zijn vmstat, netstat en iostat. Grafische programma's interpreteren de output van deze commando's.
* I/O limiet?
* De I/O limiet is de maximale hoeveelheid data die per tijdseenheid naar een bepaald apparaat gestuurd kan worden. Een voorbeeld dat je vast wel kent: CD's schrijven kan snel gaan of traag gaan, afhankelijk van de snelheid van het schrijfstation. Net zo is het voor verschillende types van harde schijven, geheugen en andere onderdelen van de computer.
Elk randapparaat heeft zijn eigen specifieke problemen. Toch kunnen de I/O problemen in twee grote categorieën opgedeeld worden: problemen te wijten aan te weinig beschikbare bandbreedte op het netwerk en problemen te wijten aan de traagheid van harde schijven.

### Netwerk I/O

Volgende problemen kunnen zich voordoen op het netwerk:
* Overbelasting: De hoeveelheid data die over het netwerk moet passeren, is groter dan de capaciteit van het netwerk, zodat alle taken die netwerkaktiviteit vereisen voor alle gebruikers traag gaan. Deze problemen kunnen opgelost worden door het netwerk op te kuisen, diensten die niet gebruikt worden te desactiveren of door het netwerk te herconfigureren, bijvoorbeeld door beter geschikte netwerkhardware te plaatsen.
* Problemen met de integriteit van het netwerk: Deze problemen treden op wanneer data op weg door het netwerk beschadigd worden en kunnen enkel opgelost worden door het falende netwerkapparaat op te sporen en te vervangen, bijvoorbeeld de netwerkkaart van de computer, de kabels of de apparatuur die ervoor zorgt dat de data de juiste weg volgt over het netwerk.

### Schijf I/O

Vertragingen te wijten aan trage schijven zijn veel moeilijker op te sporen. De schijfproblemen worden als volgt opgedeeld:
* Per-proces transfer te laag: de snelheid van lezen of schrijven van een enkel proces is onvoldoende, bijvoorbeeld omdat het proces heel veel leesoperaties moet doen. De snelheid van het systeem is in dit geval wel OK als dat bepaald proces niet draait.
* Geaggregeerde snelheid is te laag: het systeem is traag voor alle processen.
De oplossingen hangen af van de aard van het probleem. Lezen en schrijven kan traag gaan omdat de harde schijf aan het stuk gaan is, dat is het meest voordehandliggend en vervanging van de schijf verhelpt het probleem. Als alle hardware naar behoren funktioneert, wordt het echter ingewikkelder. Een mogelijke oplossing is meer schijven plaatsen, zodat er naar verschillende schijven tegelijk I/O kan zijn. Of je kan overwegen om snellere controllers te gebruiken of, in bedrijfsomgevingen, om over te stappen op een andere architectuur.

### Soorten gebruikers

Gebruikers kunnen onderverdeeld worden in verschillende klassen, afhankelijk van hun gedrag en gebruik van het systeem:
* Gebruikers die een (groot) aantal lichte commando's draaien: jij bijvoorbeeld, de beginnende gebruiker.
* Gebruikers die weinig, maar zware processen draaien: simulaties, berekeningen, wetenschappelijke toepassingen, emulatoren of andere programma's die veel geheugen en grote bestanden gebruiken.
* Gebruikers die weinig processen draaien maar veel processorcapaciteit verbruiken, bijvoorbeeld ontwikkelaars van programma's.
Je kan kijken welke gebruikers er op het systeem aangemeld zijn door middel van het w commando, daarmee kan je ook zien wat de gebruikers aan het doen zijn:
* willy@ubuntu:~$ w
* 11:19:16 up 1:59, 2 users, load average: 0,00, 0,00, 0,00
* USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
* willy :0 - 09:22 ?xdm? 3:20 1.18s x-session-manage
* willy pts/0 :0.0 09:23 0.00s 0.37s 0.02s w
In de eerste lijn herkennen we de output van het uptime commando. Daarna volgt info over de gebruikers:
* USER: de gebruikersnaam
* TTY: de (pseudo)terminal waarop de gebruiker werkt. :0 betekent dat de gebruiker op het eerste scherm aan het werken is, pts/0 is het eerste terminal venster.
* FROM: van waar is de gebruiker aangemeld: een streepje betekent lokaal, voor pseudoterminals zie je het displaynummer en -subnummer waarop het terminal venster getoond wordt.
* LOGIN@: tijdstip waarop de sessie gestart werd.
* IDLE: de zogenaamde idletime duidt aan hoe lang de gebruiker al niets aan het doen is. Voor een grafische login staat er ?xdm?: het is niet relevant om hier idletime te geven, omdat de gebruiker vast ook allerlei commando's aan het uitvoeren is of processen draaiende heeft. Dat moet je dan nagaan met ps.
* JCPU: de tijd dat de processor bezig is geweest met alle commando's die vanuit deze terminal draaien. Niet relevant voor de grafische sessie.
* PCPU: de tijd dat de processor bezig is geweest met het proces, genoemd in het laatste veld.
* WHAT: het proces dat de gebruiker nu draait.

### Grafisch gereedschap

Er is een heel gamma aan grafische programma's ter beschikking, die het makkelijker maken om de output van de vaak cryptische tekstcommando's te analyzeren. Een voorbeeld is gnome-system-monitor, die je kan opstarten vanuit een terminal venster: