Tuning Linuxu

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 :-)))

Leave a Reply

Your email address will not be published. Required fields are marked *