Medan Bash i sig inte har inbyggda mekanismer för att begränsa resursanvändningen, kan du använda olika verktyg och tekniker för att uppnå detta:
1. Gränser på systemnivå:
* ulimit: Kommandot "ulimit" låter dig ställa in gränser för resursanvändning för det nuvarande skalet och dess barnprocesser. Du kan ange gränser för:
* Maximal processstorlek (minne): `ulimit -m`
* Maximal filstorlek: `ulimit -f`
* Maximalt antal öppna filer: `ulimit -n`
* Maximalt antal processer: `ulimit -u`
* CPU Tidsgräns: `ulimit -t`
* Systemomfattande gränser: Dessa är inställda i filen "/etc/säkerhet/limits.conf" och påverkar alla användare. Du kan definiera gränser för specifika användare eller grupper.
2. Verktyg och bibliotek:
* cgroups: Kontrollgrupper låter dig gruppera processer och begränsa deras resursanvändning (CPU, minne, I/O). Detta är en kraftfull funktion för resurshantering, särskilt för containeriserade applikationer.
* CSETNS: En nyare funktion som liknar cGroups, vilket ger mer finkornig kontroll över resursgränserna.
* Resursövervakningsverktyg:
* Top: Ger en realtidsvy av systemresursanvändning, inklusive CPU, minne och processinformation.
* htop: Ett mer användarvänligt alternativ till "topp".
* ps: Listor processer och deras resursanvändning.
* gratis: Visar tillgängligt minne och bytesutrymme.
* vmstat: Ger statistik om virtuell minnesanvändning.
3. Shell Scripting Techniques:
* timeouts: Använd kommandot `timeout` för att begränsa exekveringstiden för ett kommando eller skript.
* Processövervakning: Använd verktyg som `Watch` eller 'PS' för att övervaka resursanvändning och avsluta processer som överskrider fördefinierade gränser.
* Signalhantering: Du kan fånga signaler som "Sigkill" eller "SigTerm" för att hantera överdriven resursanvändning.
* Resursspårning: Implementera anpassad logik i dina skript för att spåra resursförbrukning och avsluta processer om gränserna uppnås.
Exempel:
`` `bash
Ställ in en minnesgräns på 512 MB för det nuvarande skalet
Ulimit -M 512000
Begränsa CPU -tiden till 10 sekunder
ulimit -t 10
kör ett kommando med en timeout på 30 sekunder
Timeout 30 Command_to_Run
`` `
Viktiga överväganden:
* resursgränser kan påverka prestandan. Ställ in gränser noggrant för att undvika att hindra systemets eller applikationens funktionalitet.
* Systemomfattande gränser kan påverka alla användare. Tänk på påverkan på andra användare innan de implementerar dem.
* Resursövervakning är avgörande. Övervaka regelbundet resursanvändning för att säkerställa att gränserna är lämpliga och justeringar görs efter behov.
Genom att kombinera dessa metoder kan du effektivt hantera resursanvändning i din UNIX -miljö. Kom ihåg att välja lämpliga tekniker baserat på dina specifika behov och komplexiteten i ditt system.