Výkonnost svých miláčků zvyšují nejen maniaci automobiloví, ale i my – maniaci Linuxoví. Pomocí system control (sysctl
) můžeme měnit nastavení vetšiny systémových proměnných jádra a ovlivňovat tak chod Linuxu. Ne vždy však taková změna vyvolá pouze pozitivní dopad – pohybujeme se v oblasti experimentů ;-)
Nejdříve, jak zjistit aktuální stav proměnné. Lze to provést dvěma způsoby – přes /proc/sys
nebo pomocí sysctl
.
Zjistíme si například, zda nám kernel routuje IP packety:
cat /proc/sys/net/ipv4/ip_forward
nebo
sysctl net.ipv4.ip_forward
Měli byste dostat stejné hodnoty :-)
Nastavovat proměnné můžeme opět dvěma způsoby. Napřklad přikázat kernelu routovat IP packety můžeme
echo "1" > /proc/sys/net/ipv4/ip_forward
nebo taky
sysctl -w net.ipv4.ip_forward="1"
Oba způsoby nastavení jsou rovnocenné, ale zvykneme-li si na sysctl
, budeme mít výhodu – stejná syntaxe se používá v /etc/sysctl.conf
. Z tohoto souboru se čte a nastavuje během bootu systému. Tento soubor můžeme kdykoliv načíst příkazem
sysctl -p
Co všechno může být zajímavé “tůnovat” ?
Filesystem:
Můžeme například zjistit informace o file-handlers.
Příkaz
sysctl fs.file-nr
nám vypíše celkový počet alokovaných file-handlers, právě používaných filehadlers a maximální počet file-handlers, které můžou být alokovány. Je třeba si uvědomit, že systém neuvolňuje použité file-handlers, ale “recykluje” je. To znamená, že celkový počet znamená vlastně nejvyšší počet maximálně najednou použitých file-handlers, který kdy systém alokoval (od posledního bootu samozřejmě). Pokud se toto číslo blíží maximálnímu povolenému počtu, bylo by dobré tento zvýšit. Doporučuje se cca 4násobek celkového počtu.
Příklad:
root@linux:~# sysctl fs.file-nr fs.file-nr = 9726 1898 11107 root@linux:~# sysctl -w fs.file-max="40960" fs.file-max = 40960 root@linux:~# sysctl fs.file-nr fs.file-nr = 9726 1898 40960
Síť:
Občas nám může vadit, když (typicky v důsledku syn-flood útoku nebo máme-li hodně klientů dial-upistů) klienti uvedou hodně TCP/IP spojení do polootevřeného SYN_RECV stavu. To zjistíme pomocí
netstat -tn
Zaplní nám tak tzv. backlog frontu (fronta žádostí o spojení) a server přestane odpovídat na další žádosti o spojení. Máme-li takový problém, můžeme se pokusit o zvětšní této fronty:
root@linux:~# sysctl net.ipv4.tcp_max_syn_backlog net.ipv4.tcp_max_syn_backlog = 128 root@linux:~# sysctl -w net.ipv4.tcp_max_syn_backlog="1024" net.ipv4.tcp_max_syn_backlog = 1024 root@linux:~# sysctl net.ipv4.tcp_max_syn_backlog net.ipv4.tcp_max_syn_backlog = 1024
U zatížených serverů nebo v případech, kdy klienti neuzavírají správně TCP spojení, hrozí, že zůstane hodně spojení “polouzavřených” ve stavu TIME_WAIT nebo FIN_WAIT2 (u Solarisu CLOSE_WAIT – viz. Solaris CLOSE_WAIT). Tato spojení zabírají paměť a jsou automaticky po nějaké době zase shazována. Tuto dobu můžeme obdobně změnit proměnnou net.ipv4.tcp_fin_timeout
(v sekundách).
Poslední proměnná, která stojí za bližší prozkoumání je net.ipv4.tcp_keepalive_time
. Jde o čas v sekundách, po který server drží ESTABLISHED spojení, i když na něm není žádná aktivita. To se může stát v případě, kdy klientovi “spadne” dial-up linka a neuzavře spojení. Pak server čeká tuto dobu, než spojení sám ukončí. Defaultně bývá tento čas nastaven až na 7200 sekund (2 hodiny). To může být například pro webové servery, kde jsou spojení opravdu krátká, hodně dlouhá doba.
Další zajímavé proměnné jsou
net.ipv4.tcp_keepalive_probes
(počet pokusů o odpověď klienta, než se spojení shodí),
net.ipv4.tcp_keepalive_intvl
(čas mezi těmito pokusy),
net.ipv4.ip_local_port_range
(rozsah portů používaných pro odchozí spojení).
Všechny použitelné proměnné, se kterými si můžete hrát, zjistíte příkazem
sysctl -a
Hodně zábavy :-)))