Freitag, 16. April 2010

bittornado mit ulimits bändigen

btdownloadcurses.bittornado (die Konsolenversion der Weiterentwicklung des "experimentellen" BitTorrent-Clients) ist mitunter ziemlich Ressourcenhungrig - jedenfalls hat der Client es geschafft meinen Testserver nach tagelangem seeden zum Erliegen zu bringen.

Spontane Ideen um bittornado zu bändigen:
- in eine VM einsperren (Aufwand und relativ viel "Overhead"-Ressourcen, dafür sehr sicher)
- mit Hausmitteln begrenzen(Aufwand überschaubar, weniger sicher,ulimit "schießt")
Da der Rechner nicht unbegrenzt RAM zur Verfügung hat und jede VM wertvolle Ressourcen verbraucht habe ich mich für die unkomplizierte Variante entschieden: nice und ulimits
Zu beachten ist dabei die Arbeitsweise von ulimit:
Dieser in den meisten Linux-Distributionen standardmäßig enhaltene Mechanismus "schießt" die Prozesse die das Limit überschreiten gnadenlos ab! Datenverlust kann die Folge sein.
Der Vorteil: Der Verlust beschränkt sich auf das Amok laufende Programm und setzt nicht das ganze System außer Gefecht(was zweifellos noch mehr Datenverlust bedeutet).
Man sollte daher auch alle Parameter ausschöpfen damit das Programm erst garnicht Amok läuft.

Zurück zu ulimit und nice...
also fix einen User angelegt:
adduser bittornado
sicherheitshalber sollte man dem User alle Rechte entziehen die er nicht benötigt - man weiß ja nie welche Schwachstellen das benutzte Programm mit sich bringt...
nun kann man entweder in der /etc/security/limits.conf die entsprechenden Rechte setzen (die Datei ist gut dokumentiert) oder die Einstellungen bei jedem "login" von der .bashrc des Benutzers erledigen lassen:
Nachdem man sich also als "bittornado" eingeloggt hat kann also in der simpelsten Variante einfach
echo 'ulimit -m 102400' >> ~/.bashrc
echo 'ulimit -n 1024' >> ~/.bashrc
eingeben und beim nächsten Login sagt uns
ulimits -a
max memory size (kbytes, -m) 102400
open files (-n) 1024
Diese Werte können vom Benutzer natürlich jederzeit geändert werden im Gegensatz zur Systemweiten Konfiguration in /etc/security.
Nun startet man das Programm der Wahl und gebietet ihm Nettigkeit mittels nice:
nice -n 20 btdownloadcurses.bittornado /pfad/zum.torrent
Damit bekommt das Programm die niedrigste Priorität (verkehrte Welt - die höchste Prio ist -20 oder -19).
wie man sieht verrichtet bittornado vorerst unbehelligt seinen Dienst:

Sicher ist es ratsam zum beispiel screen zu verwenden wenn der torrent auch weiterlaufen soll wenn man sich ausloggt.

Nun haben wir sichergestellt dass der Benutzer bittornado freiwillig nicht mehr als 100MB RAM verbraucht und nicht mehr als 1024 Dateien öffnet - der nächste Schritt wäre, bittornado zu überzeugen dass es gesünder wäre diese Grenze nicht zu überschreiten.
Und wie das geht, erfahrt ihr nach der nächsten Maus ;-)

Keine Kommentare:

Kommentar veröffentlichen