GNU/Linux >> Znalost Linux >  >> Linux

Mohu spustit server Oracle bez swapu?

Zakázat swap je dobrý nápad, pokud

  • váš software se dokáže elegantně vypořádat s nedostatkem paměti nebo se omezí, aby se vyhnul situacím OOM
  • Konzistentní výkon je kritický (když váš systém swapuje latenci, zvýší se latence, což může být natolik špatné, že to bude pro mnoho aplikací prakticky nepoužitelné)

Takové věci se u databází často stávají. Vidím to spíše u noSQL databází, ale relační databáze mohou trpět stejným problémem.

V OS není nic, co by tam vyžadovalo swap. Linux se s tím vypořádá docela elegantně tím, že zabije poslední proces, který požádal o paměť. Nechcete se dostat do tohoto bodu, takže se ujistěte, že jste vyladili Oracle tak, aby používal pouze ~ 90% paměti, takže zbyde trochu pro systémové démony a prostor pro chyby. "Volná" paměť se také používá pro ukládání diskových I/O do vyrovnávací paměti, což je obrovská výkonová výhra, takže pokusy spotřebovat více paměti samotnou databází nakonec zpomalí celkový výkon systému natolik, že to bude kontraproduktivní.

Dokonce i u systémů, které mají zlomek paměti z otázky, zda je aplikace databází nebo mezipamětí nebo podobným systémem, bych v tuto chvíli ve výchozím nastavení nepoužíval swap.

Úřady

Abyste se nespoléhali jen na mé slovo:

Cassandra

Datastax vysvětluje pro Cassandru:

Swap musíte úplně zakázat. Pokud tak neučiníte, může to výrazně snížit výkon. Vzhledem k tomu, že Cassandra má více replik a transparentní převzetí služeb při selhání, je vhodnější, aby byla replika při nedostatku paměti okamžitě zabita, než aby šla do swapu. To umožňuje, aby byl provoz okamžitě přesměrován na funkční repliku, místo aby se pokračovalo v narážení na repliku, která má vysokou latenci kvůli odkládání. Pokud má váš systém hodně paměti DRAM, swapování stále výrazně snižuje výkon, protože operační systém odkládá spustitelný kód, aby bylo k dispozici více DRAM pro ukládání disků do mezipaměti.

riak

Basho vysvětluje Riakovi, že byste měli:

V ideálním případě byste měli deaktivovat swap, abyste zajistili, že Riakovy procesní stránky nebudou zaměněny. Zakázání swapu umožní Riaku zhroucení v situacích, kdy mu dojde paměť. Tím zůstane soubor výpisu zhroucení s názvem erl_crash.dump , v /var/log/riak adresář, který lze použít k určení příčiny využití paměti.

mysql

Percona sedí na plotě a poskytuje užitečná upozornění pro obě strany otázky. MariaDB nesouhlasí s deaktivací swapu:

I když některé úplně zakazují swap a určitě se chcete vyhnout tomu, aby ho používaly databázové procesy, může být rozumné ponechat nějaký odkládací prostor, abyste alespoň umožnili kernelu ladně spadnout, pokud by došlo ke špičce. Tím, že máte k dispozici nouzový swap, máte alespoň určitý prostor pro zabití všech běžících procesů.

ServerFault

Mezi dobře přijatou odpověď patří:

Osobně mi přijde swapový systém horší než havarovaný systém. Zhroucený systém by spustil pohotovostní záložní server, aby převzal řízení mnohem dříve. A v aktivním a aktivním (nebo zátěžově vyváženém nastavení) by se havarovaný systém vyřadil z rotace mnohem dříve. Opět výhra pro systém bez výměny.

Tato odpověď má dnes 22 hlasů pro a je stará 4 roky. Můžete tam také vidět některé další odpovědi vychvalující hodnotu swapu, ale nic nenasvědčuje tomu, že provozují databáze. Ani oni nemají tolik hlasů pro. :)

chobotnice

I když otevřeně nedoporučují deaktivovat swap, chobotnice říkají:

Chobotnice bývají tak trochu paměťové prase. Využívá paměť pro mnoho různých věcí, z nichž některé se ovládají snadněji než jiné. Využití paměti je důležité, protože pokud velikost procesu Squid překročí kapacitu RAM vašeho systému, některé části procesu musí být dočasně odloženy na disk. K výměně může také dojít, pokud na stejném systému běží další aplikace náročné na paměť. Výměna způsobí, že výkon Squid se velmi rychle sníží.

To je to, co nechcete, aby se stalo vaší databázi.

redis

I když redis oficiálně doporučuje swap, uživatelé jej nekupují:

Nejprve vypněte swap – Redis a swap se nemíchají snadno a to může jistě způsobit pomalost.

hadoop

Jak je vidět v této odpovědi s největším počtem hlasů v komunitě hortonworks:

Pro hostitele typu slave/worker/data které mají pouze distribuované služby, můžete pravděpodobně zakázat swap. U distribuovaných služeb je upřednostňováno nechat proces/hostitel být zabit spíše než swapovat. Zabití tohoto procesu nebo hostitele by nemělo ovlivnit dostupnost clusteru. Řečeno jinak:chcete „rychle selhat“, nikoli „pomalu degradovat“.

[...]]

Pro mistry , swap je také často zakázán, i když to není stanovené pravidlo od Hortonworks a předpokládám, že dojde k nějaké diskusi/nesouhlasu. S mistry lze zacházet podobně, jako byste zacházeli s mistry v jiných prostředích bez hadoopu.

Strach z deaktivace swapu na masterech je, že událost OOM (nedostatek paměti) by mohla ovlivnit dostupnost clusteru. Ale to se stane i s nakonfigurovaným swapem, jen to bude trvat o něco déle. Dobrými postupy administrátorů/operátorů by bylo sledovat dostupnost paměti RAM a poté opravit případné problémy, než dojde paměť. Tím je zachována dostupnost bez ovlivnění výkonu. Pak není potřeba žádná výměna.

Líbí se mi to, protože to mluví o aplikaci Java, ale dochází k mnoha stejným závěrům, které jsou uvedeny výše o databázích. Zmiňuje také monitorování což je velmi užitečné při ladění vysoce výkonných aplikací. Pokud nemáte čísla k porovnání, vše je založeno na pocitech, které se hůř srovnávají. Vytvářejte grafy pro každou měřitelnou metriku – latence na úrovni aplikace a propustnost až po grafy CPU, disku, paměti a sítě. Ty poskytují většinu skutečných dat, o kterých se musíte rozhodovat.


Linux
  1. MySQLdump bez hesla v cronjob

  2. Mohu v Unixu spustit 'make' v adresáři, aniž bych do tohoto adresáře nejprve cd'oval?

  3. Jak mohu spustit skript v Perlu jako systémový démon v linuxu?

  1. Jak mohu spustit svůj skript js uzlu automaticky pomocí plánovače na serveru

  2. Mohu použít příkaz (například strom), aniž bych jej instaloval v celém systému?

  3. Hibernace bez aktivace swapu

  1. Lze Ubuntu nainstalovat na systémy bez připojení k internetu?

  2. Jak mohu zjistit, zda má můj server IPMI nějakého druhu?

  3. Mohu nastavit systémovou poštu pro použití externího serveru SMTP?