Das Stressen eines Linux-Servers kann hilfreich sein, um seine Leistungsfähigkeit und Stabilität zu überprüfen. Es gibt verschiedene Werkzeuge und Ansätze, um einen Debian-Server zu stressen.
Stress-Test-Werkzeuge installieren: Zuerst müssen wir einige Stress-Test-Werkzeuge installieren.
sudo apt update
sudo apt install stress
Das „stress“-Werkzeug wird verwendet, um den Server zu stressen.
CPU-Test durchführen: Wir können die CPU des Servers stressen, indem wir die Anzahl der CPU-Kerne auf komplette Auslastung erhöhen.
stress --cpu 4 # 4 steht für die Anzahl der CPU-Kerne; eventuell anpassen
Dies wird die CPU für eine bestimmte Anzahl von Threads voll auslasten. Mithilfe von top können wir in einer zweiten Konsole sehen, wie der Rechner komplett auf Anschlag fährt. Beenden wir den Test mit Ctrl+C, wenn wir fertig sind.
RAM-Test durchführen: Um den Arbeitsspeicher zu stressen, verwenden Sie den folgenden Befehl:
stress --vm 4 --vm-bytes 256M
Dies wird den Arbeitsspeicher mit 4 Threads stressen, wobei jeder 256 Megabyte RAM beansprucht.
I/O-Test durchführen: Um das Festplatten-I/O zu stressen, verwenden Sie:
stress --io 4
Dies wird das Festplatten-I/O mit 4 Threads stressen. Ändern wir die Thread-Anzahl nach Bedarf.
Temperatur und Ressourcen überwachen: Während des Stress-Tests sollten wir Temperatur und Ressourcennutzung überwachen, um sicherzustellen, dass der Server nicht überhitzt und keine kritischen Ressourcen erschöpft sind. Wir können Werkzeuge wie sensors oder top verwenden.
Beenden des Stress-Tests: Um den Stress-Test zu beenden, drücken wir Ctrl+C im Terminal.
Bitte beachten, dass das Stressen eines Servers potenziell seine Leistung beeinträchtigen kann und zu einer vorübergehenden Unzugänglichkeit führen kann. Führen wir solche Tests daher nicht auf Produktions- oder wichtigen Servern durch, sondern auf dedizierten Testsystemen (oder auf Servern, die erst noch zu Produktionsservern gemacht werden.)
Hier zeige ich kurz und schnell auf, wie man Docker Container anlegt, startet und editiert.
Anmerkung: Ich nutze Windows 10 als Host und arbeite mit Docker Desktop und der Linuxumgebung für Windows namens WSL bzw. WSL2. Diese Befehle funktionieren aber selbstverständlich auch auf nativen Linux-Systemen.
Ein Image herunterladen
Docker Container sind selbstständig lauffähige Instanzen von Images, die editiert, dupliziert, getestet, verschickt oder (später) wieder entfernt werden können. Um also einen Container zu starten, muss man zunächst ein Image anlegen oder herunterladen. Dazu kann man etwa das Repository von docker.com, das Docker Hub, benutzen. (Später wird noch gezeigt, wie man Images selbst erstellen kann.) Das Image verbleibt als Blaupause dabei unverändert.
Im Online Docker Hub gibt es tausende verschiedener Images. Ich nutze hier das thematisch naheliegende Image „docker/getting-started“.
Wir geben in der Kommandozeile ein:
cd ~ # ab ins Homeverzeichnis
docker pull docker/getting-started
Folgendes sollte zu sehen sein:
Um zu überprüfen, welche Images in unserem lokalen Repository vorhanden sind, nutzen wir das Kommando docker images.
docker images
Den ersten Container erstellen
Nur erstellen wir unseren ersten einfachen Container.
Da es anfangs zu Missverständnissen führen kann, weil man fälschlicherweise die Befehle run und start als Synonyme versteht, muss ich auf den entscheidenden Unterschied hinweisen: run = Abkürzung für create + start
Der Befehl run erzeugt also einen neuen Container von einem Image und startet ihn automatisch.
Wir gehen einmal Schritt für Schritt vor.
docker create -p 80:80 docker/getting-started # Container wird angelegt, aber nicht gestartet
docker ps -a # Auflistung der vorhandenen Container
Mit „-p 80:80“ werden die Ports 80 von Container und Gastsystem miteinander verbunden, das ist wichtig, um gleich per Browser auf den Container zugreifen zu können. Wie gewünscht und erwartet wurde ein neuer Container angelegt. Nun wollen wir diesen starten. (Wir können Container über deren automatisch generierten Namen ansprechen.)
docker start eloquent_haslett # Namen kann man leichter nutzen als IDs
docker ps -a # Kontrolle
Die IP des Containers ermitteln
Um die IP des gestarteten Containers zu ermitteln, müssen wir uns zunächst per Shell verbinden. Dies geschieht mit dem Befehl docker exec. Bei dem von Docker bevorzugten Alpine Linux liegt die Shell auf dem Pfad /bin/sh – andere Linux nutzen z.B. /bin/bash.
docker exec -u 0 -it eloquent_haslett /bin/sh
hostname -i # IP des Containers ausgeben
exit # Verbindung wieder trennen
Exkurs: Die IP für Windows Systeme ermitteln
Sollte der Container auf einem Windows Host laufen, dann müssen wir die IP des Containers anders ermitteln.
Dazu müssen wir in der Windows-Konsole (nicht in Unix!) den Befehl ipconfig nutzen. Die IP findet sich dann unter dem Eintrag für den Ethernet-Adapter WSL.
Der erste Aufruf eines Containers über den Browser
Wir können jetzt entweder den Container über die Adresse localhost (für Windows) oder über die ermittelte IP aufrufen.
Im Editor suchen wir jetzt mit der Tastenkombination STRG+w nach dem String „<h1>“. Die Überschrift besteht aus dem Text „Getting Started“ wir ändern ihn in „Hallo, Welt!“. Dann bitte speichern und den Editor wieder verlassen.
Rufen wir die Seite im Browser neue auf, sollte folgende Änderung zu sehen sein:
Und natürlich sollte die Änderung auch permanent sein und nicht nach Neustart verschwunden sein.
exit # um die Shell des Containers zu verlassen, falls noch nicht geschehen
docker stop eloquent_haslett # Container stoppen
docker start eloquent_haslett # Container wieder starten
Und wenn wieder die Seite im Browser aufgerufen wird, sehen wir weiterhin die Änderung.
Der umgekehrte Weg: Image aus Container erstellen
Wenn wir nun aus dem geänderten Container ein eigenes Image erstellen wollen (um es bspw. in das Repository von Docker hochzuladen oder um es Kunden zum Testen zugänglich zu machen), wird der Befehl docker commit genutzt.
Immer, wenn ich ein neues Linux aufsetze, führe ich bestimmte Kommandos durch bzw. konfiguriere ich mein System so, dass ich vernünftig damit arbeiten kann. Jeder hat seine Eigenheiten und Bedürfnisse – hier skizziere ich mal die meinen.
Zunächst installieren wir uns sudo, um als normaler Nutzer auch wie ein Supernutzer (=root) agieren zu können, ohne uns als root anmelden zu müssen. Natürlich müssen wir diese eine Installation selbst noch als root vornehmen. Danach müssen wir uns nie wieder als root anmelden – außer ins Notfällen.
apt-get install sudo
Nun fügen wir den während der Installation angelegten Nutzer der Gruppe „sudo“ hinzu: adduser sudo. In meinem Falle also den Nutzer „juergen“
adduser juergen sudo
Mit dem Befehl groups <username> kann man prüfen, ob das Hinzufügen tatsächlich geklappt hat.
groups juergen
Das war es schon. Jetzt bitte mit exit wieder aus der Shell ausloggen und als normaler Nutzer wieder einloggen. Jetzt kann man mit einem vorangestellten sudo Befehle wie root ausführen.
Testen wir unsere neuen Fähigkeiten, indem wir gleich einmal einen vernünftigen Editor installieren.
sudo apt-get install nano
Mit diesem Editor nehmen wir unsere erste Anpassung vor. Wir sorgen dafür, dass ab jetzt jeder neue Nutzer mit der bin/bash Shell verbunden wird.
sudo apt-get install trash-cli
trash DATEI # DATEI in Papierkorb veschieben
trash-list # Dateien im Papierkorb auflisten
restore-trash # interaktiv Dateien wieder herstellen
alias del='trash -rf' # del verschiebt ab jetzt in den Papierkorb
Als Nächstes sorgen wir dafür, dass unser System gleich mit den wichtigsten Alias-Befehlen versorgt wird. Mit einem alias kann man mehrere Linux-Kommandos, oder ein Linux-Kommando mit mehreren Optionen durch einen neuen Befehl ersetzen. Es wird benutzt, um Zeit zu sparen und weniger zu tippen.
Das bekannteste alias dürfte wohl die Abkürzung dir für den Befehl „ls -l“ sein.
alias +='pushd .'
alias ..='cd ..'
alias ...='cd ../..'
alias dir='ls -la --color=auto --group-directories-first -v'
alias d='ls -la --color=auto --group-directories-first -v'
alias gzcat='gunzip -c'
alias l='ls -alF'
alias la='ls -la'
alias ll='ls -la'
alias ls='/bin/ls $LS_OPTIONS'
alias ls-l='ls -l'
alias md='mkdir -p'
alias o='less'
alias rd='rmdir'
alias rehash='hash -r'
alias rm='rm -i'
alias unzip='tar xfvz'
alias which='type -p'
alias zip='tar cfvz'
alias sudo='sudo '
alias del='trash -rf'
source /etc/bash.bashrc # Änderungen werden sofort wirksam
Und schon sieht unsere Shell sehr viel bunter, schöner, übersichtlicher aus.
Ich selbst bevorzuge auch einen minimalen Prompt.
sudo nano ~/.bashrc
export PS1='\[\e[32m\]$\[\e[0m\] '
source ~/.bashrc # Änderungen werden sofort wirksam