Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

OS Linux

limits.conf

Anoniem
_arno_
11 antwoorden
  • Hallo heren,

    Ik draai een gameserver, welke ongeveer 1x in de 3 maanden nodig vind om in een infinte loop te komen.
    Het gevolg hiervan is dat de memory vol loopt en dan erbij ook nog eens de swap volpropt.
    Gevolg, oom-killer komt in actie en begint services te killen.
    en de machine crasht uiteindelijk alsnog ;)

    Nu wil ik dit afvangen om er voor te zorgen dat 1 bepaalde user ( waar de gameserver onder draait ), nu heb ik begrepen dat dit met limits.conf kan.

    Limits.conf:
    [code:1:543f4573c1]# - an user name
    # - a group name, with @group syntax
    # - the wildcard *, for default entry
    #
    # can have the two values:
    # - "soft" for enforcing the soft limits
    # - "hard" for enforcing hard limits
    #
    # can be one of the following:
    # - core - limits the core file size (KB)
    # - data - max data size (KB)
    # - fsize - maximum filesize (KB)
    # - memlock - max locked-in-memory address space (KB)
    # - nofile - max number of open files
    # - rss - max resident set size (KB)
    # - stack - max stack size (KB)
    # - cpu - max CPU time (MIN)
    # - nproc - max number of processes
    # - as - address space limit
    # - maxlogins - max number of logins for this user
    # - priority - the priority to run user process with
    #
    [/code:1:543f4573c1]
    Nu begrijp ik alleen niet zo goed wat alles doet.
    Ik neem aan om de max memory in te stellen om dit te doen ( voor 100 mb ).
    [code:1:543f4573c1]
    username hard/soft? memlock 100000
    [/code:1:543f4573c1]
    Nu wil ik graag weten, wat is het verschil tussen hard/soft?
    Wat moet ik nog meer instellen om ervoor te zorgen dat hij minimale swap gebruikt?
    Wat betekenen deze 4 ( core as stack rss ) ongeveer? de rest snap ik denk ik wel.
  • niemand?
  • Ken deze toepassing niet, maar je kan ook harddiskruimte beperken per gebruiker met quota.
    Daar wordt met een soft limit bedoeld dat de gebruiker wordt gewaarschuwd dat ie treshold 1 heeft overschreden (maar hij kan dan wel nog extra ruimte beschrijven).
    Een hard limit houdt in dat de gebruiker treshold 2 heeft overschreden en dan kan deze ook niets meer schrijven.
    Wellicht dat hier een dergelijke constructie wordt bedoeld.
    Maareh, manpages al doorgespit?
  • Het gaat hier niet echt om harddisk ruimte maar om gebruikt RAM (en swap).

    Ik heb zoiets eens gedaan met "ulimit" (man ulimit) - hoe weet ik alleen niet meer. Het ging mij om een java app die de hele machine ophing en uiteindelijk liet crashen door geheugenverbruik. Het was iets met ulimit -v <maximaal virtueel geheugen>. Ik had dat commando opgenomen in het opstart script voor die app - limits.conf heb ik nooit gebruikt.

    Vraag het eens op het Nedlinux form (forum.nedlinux.nl) daar hebben ze mij indertijd ook geholpen.
  • Zie [b:025f995ba8]man limits[/b:025f995ba8] en [b:025f995ba8]/etc/limits[/b:025f995ba8]
  • [quote:a3516d05e5="Tekkie"]Het gaat hier niet echt om harddisk ruimte maar om gebruikt RAM (en swap).[/quote:a3516d05e5]
    dat snap ik (ik kan lezen [i:a3516d05e5]en [/i:a3516d05e5]denken :P ), maar wellicht dat de systematiek gelijk is:
    zachte grens = waarschuwing
    harde grens = blokkade
  • [quote:66bd2290a9="m3ssi4h"]Zie [b:66bd2290a9]man limits[/b:66bd2290a9] en [b:66bd2290a9]/etc/limits[/b:66bd2290a9][/quote:66bd2290a9]
    [code:1:66bd2290a9]
    [arno@fiction ~]$ man limits
    No manual entry for limits
    [arno@fiction ~]$ ls /etc/limits
    ls: /etc/limits: No such file or directory
    [/code:1:66bd2290a9]
    Vandaar ;)
  • Nu weet ik eigenlijk nog steeds niet wat ik precies moet doen ;)
  • Wat ik zou doen als er geen limits.conf is; een klein wrapperscriptje om je gameserver heenzetten, en het scriptje in de map van de gameserver dumpen..
    [code:1:d464a9990e]#!/bin/sh

    ulimit -m 51200

    while true
    do
    ./game -optie1 -optie2 -whatever
    echo "Oops: the gameserver needed a restart on `date`" >>/path/to/some/log/file
    sleep 10
    done[/code:1:d464a9990e]
    Hierboven voorbeeld maakt een loopje, zodat als de gameserver word afgeschoten vanwege het overschijden van de aangeven resources, na tien seconde wachten (geeft kernel wat tijd om alles weer op orde te krijgen) weer herstart word. Als je het wilt stoppen, het scriptje dus killen - niet de gameserver binary.
    Heb optie -m (max memory size (kbytes, -m)) gebruikt van ulimit - kan ook zijn dat je -v (virtual memory (kbytes, -v)) moet gebruiken. Zelf even uitproberen. En uiteraard de parameters die je nodig hebt zelf inschatten - de 50Mb hierboven is waarschijnlijk niet genoeg om ook maar 1 map in te laden.
    Op Google zoeken naar "linux + ulimit" levert je bijna 646.000 resultaten op; de rest lijkt me simpel. Sommige mensen zullen wel weer gaan schreeuwen "eek! loops are evil!" maar het is wel een begrijpelijke oplossing voor den beginner.
  • De loop zat zowiezo al in het gameserver opstart script, het toevoegen van ulimit -v werkte prima.
    Getest op 5kb, bij start miept hij meteen dat hij het 1 en ander niet kan allocaten.
    Dus het werkt neem ik aan, hopelijk lost hier hierdoor de gevolgen van een brakke gameserver op. ;)

    Probleem was dat de memory volliep en daarna de swap volgooide en niks meer deed.
    Zorgt ulimit er ook voor dat swap niet volloopt ? ( ik neem aan dat sawp gaat lopen nadat memory vol zit, dus dat er geen probleem is in mijn situatie. )
  • Als je het maximaal alloceerbaar geheugen op fysiek memory+een klein beetje extra zet voor noodgevallen, lijkt me dat het zo werkt. Ik weet er ook niet zo heel veel over; het is toch de bedoeling dat je dit soort constructies niet zo vaak nodig hebt, nietwaar?
    Let wel, de limiet geld nu alleen voor die ene shell (dat script), en de processen die worden opgestart daarmee. Buiten het script heeft deze limiet geen invloed op andere processen.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.