Heim Datenbank MySQL-Tutorial vm.swappiness=0在最新内核中可能会OOM,MySQL被意外kill

vm.swappiness=0在最新内核中可能会OOM,MySQL被意外kill

Jun 07, 2016 pm 04:41 PM
oom Kernel 最新

请使用RHEL/CentOS 6.4及更新版本内核的MySQL同志们注意,vm.swappiness = 0的默认行为修改了,如果继续设置vm.swappiness = 0,有可能导致系统内存溢出,从而导致MySQL被意外kill掉。 在之前的《LINUX上MYSQL优化三板斧》中,我们建议大家把 vm.swappiness

请使用RHEL/CentOS 6.4及更新版本内核的MySQL同志们注意,vm.swappiness = 0的默认行为修改了,如果继续设置vm.swappiness = 0,有可能导致系统内存溢出,从而导致MySQL被意外kill掉。

在之前的《LINUX上MYSQL优化三板斧》中,我们建议大家把 vm.swappiness = 0 设置好。来尽量避免MySQL的服务器内存被交换出去。这样Linux在把内存交换出去时更偏向于将cache页交换出去,而不是将inactive页交换出去。详细描述请参考:http://www.woqutech.com/?p=1200。

经常有人会问, vm.swappiness = 0会不会导致Linux在有swap空间的时候也不交换出去,从而导致内存溢出(OOM)。参照《LINUX上MYSQL优化三板斧》介绍,我们知道,这个值只是一个Linux在判断是否交换内存(swap)的一个“倾向”参考值,而并不是说,设置为0以后,Linux就完全不会使用内存交换空间。

但是,在较新的内核中(2.6.32-303.el6及以后),vm.swappiness = 0 的默认行为修改掉了,这个说法不再成立。设置该参数vm.swappiess=0,有可能导致MySQL数据库所在的系统出现内存溢出。一般来说,MySQL数据库占用的内存是整个服务器中最大的,根据Linux的策略,它会会首先把MySQL给Kill掉(调整?/proc/(pidof -s mysqld)/oom_adj可以改变OOM时kill的优先级),从而导致应用故障等。

这个修改是在内核3.5-rc1中提交的,并且合并到了2.6.32-303.el6及之后的各个版本。先让我们来看看这个patch:

http://gitorious.ti.com/ti-linux-kernel/ti-linux-kernel/commit/fe35004fbf9eaf67482b074a2e032abb9c89b1dd?format=patch

From fe35004fbf9eaf67482b074a2e032abb9c89b1dd Mon Sep 17 00:00:00 2001

From: Satoru Moriya

Date: Tue, 29 May 2012 15:06:47 -0700

Subject: [PATCH] mm: avoid swapping out with swappiness==0

Sometimes we'd like to avoid swapping out anonymous memory. ?In

particular, avoid swapping out pages of important process or process

groups while there is a reasonable amount of pagecache on RAM so that we

can satisfy our customers' requirements.

OTOH, we can control how aggressive the kernel will swap memory pages with

/proc/sys/vm/swappiness for global and

/sys/fs/cgroup/memory/memory.swappiness for each memcg.

But with current reclaim implementation, the kernel may swap out even if

we set swappiness=0 and there is pagecache in RAM.

This patch changes the behavior with swappiness==0. ?If we set

swappiness==0, the kernel does not swap out completely (for global reclaim

until the amount of free pages and filebacked pages in a zone has been

reduced to something very very small (nr_free + nr_filebacked

watermark)).

Signed-off-by: Satoru Moriya

Acked-by: Minchan Kim

Reviewed-by: Rik van Riel

Acked-by: Jerome Marchand

Signed-off-by: Andrew Morton

Signed-off-by: Linus Torvalds

---

?mm/vmscan.c | ? ?6 +++---

?1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c

index 67a4fd4..ee97530 100644

--- a/mm/vmscan.c

+++ b/mm/vmscan.c

@@ -1761,10 +1761,10 @@ static void get_scan_count(struct mem_cgroup_zone *mz, struct scan_control *sc,

?? * proportional to the fraction of recently scanned pages on

?? * each list that were recently referenced and in active use.

?? */

-?? ap = (anon_prio + 1) * (reclaim_stat->recent_scanned[0] + 1);

+?? ap = anon_prio * (reclaim_stat->recent_scanned[0] + 1);

?? ap /= reclaim_stat->recent_rotated[0] + 1;

-?? fp = (file_prio + 1) * (reclaim_stat->recent_scanned[1] + 1);

+?? fp = file_prio * (reclaim_stat->recent_scanned[1] + 1);

?? fp /= reclaim_stat->recent_rotated[1] + 1;

?? spin_unlock_irq(&mz->zone->lru_lock);

@@ -1777,7 +1777,7 @@ out:

????? unsigned long scan;

????? scan = zone_nr_lru_pages(mz, lru);

-????? if (priority || noswap) {

+????? if (priority || noswap || !vmscan_swappiness(mz, sc)) {

????????? scan >>= priority;

????????? if (!scan && force_scan)

???????????? scan = SWAP_CLUSTER_MAX;

--?

1.7.5

就像Satoru Moriya所说的那样,在之前的版本中,就算我们设置了swappiness=0并且RAM中还有pagecache,内核也可能会交换出部分匿名内存页。而为了“满足用户的需求”,这个patch修改了swappiness=0的行为,如果你设置swappiness=0,那么只有在(nr_free + nr_filebacked

在2.6.32-303.el6 RHEL/CentOS及更新版本的内核中,该patch就已经被合并进来:

* Mon Aug 27 2012 Jarod Wilson [2.6.32-303.el6]

...

- [mm] avoid swapping out with swappiness==0 (Satoru Moriya) [787885]

其他分发版本的Linux(比如Debian,Ubuntu)的版本中,请各位自己查阅一下,看看时候已经合并该patch。

RHEL/CentOS 6.3的内核版本是2.6.32-279,而RHEL/CentOS 6.4的内核为2.6.32-358,从这个版本开始,swappiness的行为就已经修改了,使用这个版本及之后版本的同志们需要特别注意一下。

解决的办法其实也很简单,

1、尽量保证Linux操作系统还有足够的内存

2、最新的内核,建议把vm.swappiness设置1

3、考虑设置 /proc/(pidof -s mysqld)/oom_adj为较小的值来尽量避免MySQL由于内存不足而被关闭。

参考:

https://github.com/torvalds/linux/blob/master/mm/vmscan.c

http://gitorious.ti.com/ti-linux-kernel/ti-linux-kernel/commit/fe35004fbf9eaf67482b074a2e032abb9c89b1dd?format=patch

http://www.mysqlperformanceblog.com/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So installieren Sie den Linux-Kernel unter Ubuntu 22.04 Detailliertes Tutorial! So installieren Sie den Linux-Kernel unter Ubuntu 22.04 Detailliertes Tutorial! Mar 01, 2024 pm 10:34 PM

Um den Linux-Kernel auf Ubuntu22.04 zu installieren, können Sie die folgenden Schritte ausführen: Aktualisieren Sie das System: Stellen Sie zunächst sicher, dass Ihr Ubuntu-System auf dem neuesten Stand ist. Führen Sie den folgenden Befehl aus, um das Systempaket zu aktualisieren: sudoaptupdatesudoaptupgrade Laden Sie die Kerneldatei herunter: Besuchen Sie die Offizielle Linux-Kernel-Website () zum Herunterladen der erforderlichen Kernel-Version. Wählen Sie eine stabile Version und laden Sie die Quellcodedatei herunter (mit der Erweiterung .tar.gz oder .tar.xz), zum Beispiel: wget Entpacken Sie die Datei: Verwenden Sie den folgenden Befehl, um die heruntergeladene Kernel-Quellcodedatei zu entpacken: tar-xflinux-5.14 .tar. xz install build dependencies: Installieren Sie die zum Erstellen des Kernels erforderlichen Tools und Abhängigkeiten. Ausführen

Ändern Sie die Startsequenz des Linux-Kernels Ändern Sie die Startsequenz des Linux-Kernels Feb 23, 2024 pm 10:22 PM

Ändern Sie die Kernel-Startsequenz von Linux 1. Ändern Sie die Kernel-Startsequenz von RHEL6/CentOS6. Überprüfen Sie die Datei /etc/grub.conf, um die Systemkernel-Situation zu ermitteln. Dem Dokument zufolge gibt es im System zwei Kernel-Versionen, nämlich 2.6.32-573.18.1.el6.x86_64 und 2.6.32-431.23.3.el6.x86_64. Die Kernel-Versionen werden von oben nach unten aufgelistet. In der Datei grub.conf können Sie durch Anpassen der Standardparameter entscheiden, welche Kernel-Version beim Systemstart verwendet werden soll. Der Standardwert ist 0, was bedeutet, dass das System die neueste Kernel-Version startet. Ein Wert von 0 entspricht dem ersten Inhalt, der in der Datei grub.conf aufgeführt ist.

Interview mit einer bestimmten Gruppe: Wie sollten Sie das Problem beheben, wenn Sie online auf OOM stoßen? Wie kann man es lösen? Welche Optionen? Interview mit einer bestimmten Gruppe: Wie sollten Sie das Problem beheben, wenn Sie online auf OOM stoßen? Wie kann man es lösen? Welche Optionen? Aug 23, 2023 pm 02:34 PM

OOM bedeutet, dass im Programm eine Sicherheitslücke vorliegt, die durch den Code oder die JVM-Parameterkonfiguration verursacht werden kann. In diesem Artikel erfahren die Leser, wie sie Fehler beheben können, wenn ein Java-Prozess OOM auslöst.

Die neueste Liste der Snapdragon-Prozessor-Rankings Die neueste Liste der Snapdragon-Prozessor-Rankings Mar 22, 2024 am 11:33 AM

Snapdragon-Prozessoren genießen seit jeher große Anerkennung für ihre hervorragende Leistung und stabile Leistung und gehören zu den bevorzugten Prozessoren für mobile Geräte wie Mobiltelefone und Tablets. Mit der kontinuierlichen Weiterentwicklung der Technologie werden auch die Snapdragon-Prozessoren ständig aktualisiert und jede neue Produktgeneration wird große Aufmerksamkeit erregen. Kürzlich hat eine renommierte Organisation die neueste Rangliste der Snapdragon-Prozessoren veröffentlicht, die den Menschen ein klareres Verständnis der Leistung jedes Prozessors vermittelt. Zunächst einmal gehören laut Liste die Prozessoren der Snapdragon 8-Serie seit jeher zu den leistungsstärksten Prozessoren und sind auf dem Markt sehr gefragt. Neueste Ausgabe

Interviewer: Wenn Sie online auf OOM stoßen, wie können Sie es lösen? Interviewer: Wenn Sie online auf OOM stoßen, wie können Sie es lösen? Aug 17, 2023 pm 04:38 PM

Man kann sagen, dass OOM eines der Probleme ist, die wir Entwickler am meisten fürchten, und die Ursachen liegen im Wesentlichen in der Code- oder JVM-Parameterkonfiguration. In diesem Artikel erfahren die Leser, wie sie Fehler beheben können, wenn ein Java-Prozess OOM auslöst.

Basiert das Android-System auf dem Linux-Kernel? Basiert das Android-System auf dem Linux-Kernel? Mar 14, 2024 pm 03:12 PM

Basiert das Android-System auf dem Linux-Kernel? Das Android-System, eines der am weitesten verbreiteten mobilen Betriebssysteme der Welt, soll seit jeher auf Basis des Linux-Kernels entwickelt werden. Doch wie ist die reale Situation? Lassen Sie uns dieses Problem untersuchen. Lassen Sie uns zunächst etwas über den Linux-Kernel lernen. Der Linux-Kernel als Open-Source-Betriebssystemkernel wurde erstmals 1991 von Linus Torvalds veröffentlicht. Es bietet eine gute Grundlage für viele Betriebssysteme, einschließlich And

Analyse und Analyse der Hauptfunktionen des Linux-Kernels Analyse und Analyse der Hauptfunktionen des Linux-Kernels Mar 14, 2024 am 11:27 AM

Analyse und Analyse der Hauptfunktionen des Linux-Kernels Der Linux-Kernel ist ein großes und komplexes System, in dem die Hauptfunktion eine wichtige Rolle spielt. Sie ist der Einstiegspunkt des gesamten Systems und schließlich für die Initialisierung verschiedener Subsysteme, Treiber und Kernelmodule verantwortlich Starten Sie das gesamte Betriebssystem. In diesem Artikel werden die Hauptfunktionen des Linux-Kernels analysiert und analysiert und seine Schlüsselfunktionen und der Ausführungsablauf anhand spezifischer Codebeispiele demonstriert. Im Linux-Kernel ist der Einstiegspunkt der Hauptfunktion start_k in der Datei init/main.c.

Entdecken Sie die Programmiersprachen, die unter der Haube des Linux-Kernels verwendet werden Entdecken Sie die Programmiersprachen, die unter der Haube des Linux-Kernels verwendet werden Mar 20, 2024 am 08:06 AM

Titel: Erkundung der Programmiersprache, die dem Linux-Kernel zugrunde liegt. Als stabiler und zuverlässiger Open-Source-Betriebssystemkern bietet der Linux-Kernel ein breites Anwendungsspektrum im Computerbereich. Um ein tiefgreifendes Verständnis des Linux-Kernels zu erlangen, müssen Sie die auf der zugrunde liegenden Ebene verwendete Programmiersprache einbeziehen. Tatsächlich ist der Linux-Kernel hauptsächlich in der Sprache C geschrieben, einer effizienten, flexiblen und einfach zu wartenden Programmiersprache, die sich sehr gut für die Betriebssystementwicklung eignet. In diesem Artikel werden die Grundlagen des Linux-Kernels aus einer detaillierten Perspektive untersucht

See all articles