Účelem tohoto příspěvku je vysvětlit, jak nakonfigurovat parametry jádra na systémech Red Hat (RHEL/CentOS) a Oracle Linux (OL) pomocí nástroje sysctl. Obslužný program sysctl (/sbin/sysctl) umožňuje (privilegovaným) uživatelům dotazovat se a upravovat parametry jádra za běhu. Tento nástroj je společný pro většinu distribucí Linuxu, mezi distribucemi však mohou existovat jemné rozdíly, např. RHEL/OL a SuSE. Parametry, které lze zobrazit/upravit, jsou ty, které jsou vystaveny prostřednictvím souborového systému procfs /proc/sys. Při nastavování v konfiguračním souboru se používá notace tečka(.“).
Dotaz na konkrétní parametr jádra
Chcete-li se dotázat na pojmenovanou hodnotu parametru jádra, spusťte obslužný program sysctl s buď „-n ‘ nebo vůbec žádné argumenty, např.:
# sysctl kernel.shmmax kernel.shmmax = 68719476736
# sysctl -n kernel.shmmax 68719476736
Ve výše uvedeném příkladu se parametr kernel.shmmax vztahuje k /proc/sys/kernel/shmmax, např.:
# cat /proc/sys/kernel/shmmax 68719476736
Dotaz na všechny parametry jádra
Chcete-li se dotazovat na všechny hodnoty parametrů jádra, spusťte obslužný program systctl s „-a ‘ argument např.:
# sysctl -a | more kernel.sched_child_runs_first = 0 kernel.sched_min_granularity_ns = 4000000 kernel.sched_latency_ns = 20000000 kernel.sched_wakeup_granularity_ns = 4000000 kernel.sched_tunable_scaling = 1
Můžete grep pro konkrétní parametr jádra ve výše uvedeném výstupu. Použijte regulární výrazy pro odfiltrování skupiny parametrů jádra. Například,
# sysctl -a | grep ^kernel.s[h,e]m kernel.shmmax = 68719476736 kernel.shmall = 4294967296 kernel.shmmni = 4096 kernel.shm_rmid_forced = 0 kernel.sem = 250 32000 100 128
Okamžité nastavení parametrů jádra (nikoli trvale)
Chcete-li hodnotu parametru sysctl nastavit okamžitě (nikoli trvale), použijte sysctl -w příkaz. Například:
# sysctl -w kernel.sysrq=0 kernel.sysrq = 0
Parametr, který nabývá více hodnot, by měl mít hodnoty uzavřené v uvozovkách. Chcete-li například nastavit net.ipv4.ip_local_port_range na 1025-65535:
# sysctl -w net.ipv4.ip_local_port_range="1025 65535"
Alternativně je možné přenést hodnoty přímo do souboru procfs, který představuje parametr sysctl. Například:
# echo 1 > /proc/sys/net/ipv4/ip_forward # echo "1025 65535" > /proc/sys/net/ipv4/ip_local_port_range
Trvalé nastavení parametrů jádra
Hodnoty parametrů jádra změněné pomocí metody ‚systctl -w‘ jsou nestálé, tj. ztraceny při restartu serveru. Konfigurační soubor nástroje sysctl, /etc/sysctl.conf , by se měl používat k trvalému ukládání hodnot parametrů jádra, které nejsou výchozí. Soubor je analyzován při spouštění serveru a hodnoty v něm se používají ke konfiguraci jádra. Syntaxe vyžadovaná pro konfiguraci parametrů jádra pomocí souboru /etc/sysctl.conf se řídí zápisem component.parameter=value, např. kernel.shmmax =33554432.
Syntaxe
# vi /etc/sysctl.conf [component].[parameter]=[value]
Následuje ukázkový soubor /etc/sysctl.conf:
# grep -v ^# /etc/sysctl.conf net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 ....
Spolu s použitím metody 'systctl -w' k úpravě parametrů jádra lze také upravit parametry tak, že je přidáte do souboru /etc/sysctl.conf a poté soubor analyzujete pomocí obslužného programu sysctl s '-p ‘ argument např.:
# sysctl -n kernel.ctrl-alt-del 0
# echo "kernel.ctrl-alt-del=1" >> /etc/sysctl.conf
# sysctl -p kernel.ctrl-alt-del = 1
Úprava parametrů jádra jejich přidáním do souboru /etc/sysctl.conf je nejen nastaví (sysctl -p), ale také zajistí, že upravené hodnoty přetrvají i po restartu serveru.
Trvalé nastavení parametrů jádra pod CentOS / RHEL 7
Přístup k nastavení parametru jádra pod CentOS/RHEL 7 je trochu jiný než u starší verze. Vytvořte nový soubor conf pod /etc/sysctl.d/ adresář. Názvy souborů mají formát /etc/sysctl.d/[jméno].conf. Soubory v adresáři /etc/sysctl.d/ jsou analyzovány v pořadí, takže se doporučuje přidat před název souboru číslo udávající pořadí, ve kterém chcete soubory analyzovat. Například /etc/sysctl.d/ 01-custom.conf:
# cat /etc/sysctl.d/01-custom.conf net.ipv4.ip_forward=1 net.ipv4.ip_local_port_range="1025 65535"
Aby systém okamžitě použil hodnoty v novém/aktualizovaném souboru /etc/sysctl.d, spusťte sysctl -p [název souboru]:
# sysctl -p /etc/sysctl.d/01-custom.conf