Vandaag twee tips voor de prijs van één. De eerste tip toont hoe je kunt nagaan hoe de harde schijfruimte gebruikt wordt. Waardoor je bij het vollopen van de hard schijf op tijd kunt opruimen. De tweede tip bespioneert een uur lang uw processen (programma's) waardoor je kunt zien welke proces de processor het meest belast. Daarmee kan je aan de slag om cpu veelvraten die je zelden gebruikt uit te schakelen, waardoor andere processen intensiever gebruik kunnen maken van de CPU en dus sneller werken.
De harde schijf ruimte is gelimiteerd. Daarom is het handig om nu en dan te controleren hoeveel harde schijfruimte nog beschikbaar is. Bij een schaarste aan harde schijfruimte moeten we op zoek naar grote bestanden die we kunnen verwijderen of verplaatsen om ruimte vrij te maken.
De meest gebruikte opdrachten in linux om de schijfruimte te controleren zijn df (disk free) en du (disk usage).
du tekst.txt
4 tekst.txt
Standaard wordt de gebruikte schijfruimte uitgedrukt in kilobytes.
Om de gebruikte schijfruimte van alle bestanden afzonderlijk in een map op te zoeken, gebruik je
du -a test
4 test/pcpu.sh
4 test/uitvoer.txt
4 test/process_log.sh
4 test/teksten/tekst.txt
8 test/teksten
24 test
-a zorgt ervoor dat alle bestanden in de opgegeven map en zijn submappen recursief onderzocht worden.
Zonder -a wordt enkel de schijfruimte ingenomen door de map en zijn submappen weergegeven.
du test
8 test/teksten
24 test
Het opzoeken van grote bestanden is een veel voorkomende bezigheid. Je moet ze namelijk regelmatig verwijderen of verplaatsen. Samen met de sort opdracht kunnen we deze eenvoudig opsporen met:du -h test/pcpu.sh
4,0K test/pcpu.shdu -h test
8,0K test/teksten 24K test
du -ak /home/dany/ | sort -nrk 1 | head
36445496 /home/dany/
989680 /home/dany/HoN
942436 /home/dany/HoN/game
680164 /home/dany/HoN/game/resources0.s2z
572548 /home/dany/.mozilla
572540 /home/dany/.mozilla/firefox
572504 /home/dany/.mozilla/firefox/htosgwab.default
503320 /home/dany/.mozilla/firefox/htosgwab.default/Cache
253812 /home/dany/.local
253808 /home/dany/.local/share
De -a zorgt ervoor dat alle mappen en bestanden in /home/dany en al zijn submappen weergegeven worden. De eerste kolom van de uitvoer bevat de grootte in kilobytes (-k argument) en de tweede kolom bevat de naam van het bestand of de map.
De opdracht sort wordt gebruikt om de eerste kolom (k 1) numeriek (-n) in aflopende volgorde (r)(reverse) te sorteren. De opdracht head wordt gebruikt om enkel de eerste 10 regels van de uitvoer weer te geven, m.a.w. de 10 grootste bestanden en mappen.
Een tekortkoming van de bovenstaande opdrachtregel is dat er ook mappen worden weergegeven. Als je enkel de grootste bestanden wilt opzoeken, kun je gebruik maken van de volgende aangepaste opdrachtregelfind . -type f -exec du -k {} \; | sort -nrk 1 | head -n 40 680164 ./HoN/game/resources0.s2z 231540 ./HoN/game/textures.s2z 98308 ./.kde4/share/apps/nepomuk/repository/main/data/virtuosobackend/soprano-virtuoso.db 65952 ./.thunderbird/zhfgduop.default/ImapMail/zimbra.snt-1.be/INBOX 65536 ./.local/share/akonadi/db_data/ib_logfile1 65536 ./.local/share/akonadi/db_data/ib_logfile0 46084 ./.mozilla/firefox/htosgwab.default/urlclassifier3.sqlite 43640 ./.mozilla/firefox/htosgwab.default/Cache/7/B7/B6299d01 35492 ./.mozilla/firefox/htosgwab.default/Cache/5/89/7DB52d01 32776 ./.mozilla/firefox/htosgwab.default/Cache/_CACHE_003_We gebruiken hier de opdracht find om alle bestanden af te zonderen en door te spelen aan du.
De processor is één van de belangrijkste systeembronnen van onze computer. Het is dus interessant om de processen die veel tijd van de CPU opeisen te kennen. Het recept om dit te achterhalen is het in het oog houden (monitoring) van de door de processen opgeëiste CPU tijd. Dit moet gebeuren terwijl het systeem normaal gebruikt en belast wordt. In onze tip starten we daarvoor een script die één uur lang de door de processen opgeëiste CPU tijd in een bestand opslaat (loggen).
#!/bin/bash #Name: pcpu_usage.sh #Description: Script to calculate cpu usage by processes for 1 hour # Berekent het processorgebruik door processen gedurende 1 uur SECS=3600 #Change the SECS to total seconds for which monitoring is to be performed. #SECS bepaalt hoelang het toezicht duurt UNIT_TIME=60 #UNIT_TIME is the interval in seconds between each sampling #UNIT_TIME bepaalt in seconden hoeveel tijd tussen elke bemonstering STEPS=$(( $SECS / $UNIT_TIME )) #echo Watching CPU usage... ; echo Toezicht op het CPU gebruik... ; for((i=0;i<STEPS;i++)) do ps -eo comm,pcpu | tail -n +2 >> /tmp/cpu_usage.$$ sleep $UNIT_TIME done echo #echo CPU eaters : echo CPU veelvraten: cat /tmp/cpu_usage.$$ | \ awk ' { process[$1]+=$2; } END{ for(i in process) { printf("%-20s %s\n",i, process[i]) ; } }' | sort -nrk 2 | head rm /tmp/cpu_usage.$$ #Remove the temporary log file #Verwijderen van het log bestandBij het uitvoeren van dit script krijg je na één uur de volgende resultaten:
./pcpu_usage.sh
Toezicht op het CPU gebruik...
CPU veelvraten:
Xorg 1296.4
fiberlamp 276.5
kwin 17.5
kscreenlocker 2.6
plasma-desktop 1.9
xbindkeys 0
watchdog/3 0
watchdog/2 0
watchdog/1 0
watchdog/0 0
Deze resultaten komen van een computer die één uur lang niet gebruikt werd. Zo merk je dat de grafische omgeving (Xorg) de grootste slokop is, nu begrijp je waarom men op servers geen grafische omgeving installeert of start. Daarnaast werd een schermbeveiliging (fiberlamp) actief, schermbeveiligingen op computers op batterijen gebruik je dus best niet (minder CPU belasting betekent immers minder stroomverbruik).
In het bovenstaande script worden de gegevens verzameld door de opdracht ps -eo comm,pcpu
waarbij ps de opdrachtnaam (comm) en het CPU gebruik in percent (pcpu) van de processen opvraagt.
Deze opdracht herhalen we regelmatig (elke minuut) gedurende één uur en slaan de verzamelde gegevens op in het bestand /tmp/cpu_usage.$$.
Tussen elke meting wacht het script met de opdracht sleep 60
één minuut.
De opdracht tail -n +2
wordt gebruikt om de hoofding in de uitvoer van de ps opdracht te verwijderen, waardoor enkel de gegevens overblijven.
De $$ tekens in de bestandsnaam cpu_usage.$$ worden tijdens het uitvoeren van het script vervangen door het proces ID (PID) van het script. Dit PID is een cijfer waaraan je kunt zien hoeveel processen voordien reeds werden opgestart. Aangezien dit logbestand een tijdelijk bestand is wordt het in de map /tmp opgeslagen.
Het logbestand wordt na één uur ingelezen en bevat 60 metingen (een uur lang elke minuut een meting). Daarna wordt awk gebruik om van elk proces alle CPU belastingen samen te tellen. Daarbij wordt gebruik gemaakt van een associatieve array, waarbij de naam van het proces als array sleutel (index) wordt gebruikt. Uiteindelijk worden de resultaten in aflopende volgorde numeriek gesorteerd en worden de eerste 10 regels weergegeven. Deze regels bevatten de processen die in het afgelopen uur de processor het zwaarst hebben belast.
Het spreekt voor zich dat je het script kunt aanpassen om andere meetwaarden te verzamelen en te verwerken.