CentOSOOMメモリオーバーフローのケースを思い出してください

LinuxカーネルにはOutof Memory Killer(OOM Killer)組み込みメカニズムがあり、メモリが不足するのを防ぐために、メモリを大量に消費するプロセス、特に大量のメモリを即座に消費するプロセスを監視します。カーネルはプロセスを強制終了します。

ビジネスプロセスが異常に停止または再開します。/var/log/messagesログでOOMが発生したかどうかを判断できます。発生した場合、どのプロセスがOOMKillerをトリガーするために多くのメモリスペースを占有しますか。

問題の現象:####

nmapを1時間実行すると、終了します。ログを確認すると、システムメモリが不足していることが示され、oomメカニズムがトリガーされ、nmapプロセスが強制終了されますが、履歴メモリ使用量が継続的にピークに達していません。

検証分析:####

ログをフィルタリングすると、メッセージログに複数のメモリ不足ログ情報があり、プロセスの強制終了アクションがトリガーされていることがわかりました。

Nov 2211:09:03 VM_0_14_centos kernel:[ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
Nov 2211:09:03 VM_0_14_centos kernel:[328]032826240945600 systemd-journal
Nov 2211:09:03 VM_0_14_centos kernel:[346]034629149762500 lvmetad
Nov 2211:09:03 VM_0_14_centos kernel:[349]034911121186240-1000 systemd-udevd
Nov 2211:09:03 VM_0_14_centos kernel:[469]046913877113270-1000 auditd
Nov 2211:09:03 VM_0_14_centos kernel:[505]05056594751800 systemd-logind
Nov 2211:09:03 VM_0_14_centos kernel:[506]8150615044143340-900 dbus-daemon
Nov 2211:09:03 VM_0_14_centos kernel:[511]99951113513119096100 polkitd
Nov 2211:09:03 VM_0_14_centos kernel:[512]9985122144371000 lsmd
Nov 2211:09:03 VM_0_14_centos kernel:[516]0516109634800 acpid
Nov 2211:09:03 VM_0_14_centos kernel:[518]38518123301802900 ntpd
Nov 2211:09:03 VM_0_14_centos kernel:[729]0729315701551900 crond
Nov 2211:09:03 VM_0_14_centos kernel:[730]07306476521800 atd
Nov 2211:09:03 VM_0_14_centos kernel:[803]0803268454985000 dhclient
Nov 2211:09:03 VM_0_14_centos kernel:[881]088114397527579600 tuned
Nov 2211:09:03 VM_0_14_centos kernel:[883]0883802294877900 rsyslogd
Nov 2211:09:03 VM_0_14_centos kernel:[967]096727522331200 agetty
Nov 2211:09:03 VM_0_14_centos kernel:[968]096827522331000 agetty
Nov 2211:09:03 VM_0_14_centos kernel:[1324]0132428199256600-1000 sshd
Nov 2211:09:03 VM_0_14_centos kernel:[1345]01345243651151700 sgagent
Nov 2211:09:03 VM_0_14_centos kernel:[1393]013933881916263000 barad_agent
Nov 2211:09:03 VM_0_14_centos kernel:[1402]014023954718303100 barad_agent
Nov 2211:09:03 VM_0_14_centos kernel:[1403]0140316945928635100 barad_agent
Nov 2211:09:03 VM_0_14_centos kernel:[1480]0148025249982100 YDLive
Nov 2211:09:03 VM_0_14_centos kernel:[3343]03343320071981900 screen
Nov 2211:09:03 VM_0_14_centos kernel:[3344]03344290232721400 bash
Nov 2211:09:03 VM_0_14_centos kernel:[13683]01368314284017033600 YDService
Nov 2211:09:03 VM_0_14_centos kernel:[19272]019272678212422656132900 nmap
Nov 2211:09:03 VM_0_14_centos kernel: Out of memory: Kill process 19272(nmap) score 873 or sacrifice child
Nov 2211:09:03 VM_0_14_centos kernel: Killed process 19272(nmap) total-vm:2712848kB, anon-rss:1690624kB, file-rss:0kB, shmem-rss:0kB

ここで、anon-rss値から、プロセスが強制終了される前に実際に占有していた物理メモリの量を確認できます。

total-vmは、プログラムが完全にメモリ内にある場合に占有する必要のあるメモリスペースの量を示します
anon-rssプロセスが実際に占有しているメモリの量

注:システムで高メモリを使用するプロセスが複数ある場合、強制終了されたプロセスの実際のメモリサイズは、システムの実際のメモリサイズと異なる場合があります。次に、現在のシステムで高メモリを使用するプロセスの合計メモリを計算できます。どのプロセスが多くのシステムメモリを消費するかを比較して確認します。

実際のメモリ使用量の計算:
RSS(物理メモリページ)のサイズは4kBで、メッセージログに出力されたRSS値(プロセスが占有している物理メモリページの数)を表示できます。
たとえば、ここでは、nmapプロセスが最も多く占有し、実際に占有されている物理メモリページは422656であり、4KBを掛けると1690624KBになり、1024で割ると1651MBになります。

Recommended Posts

CentOSOOMメモリオーバーフローのケースを思い出してください
Centos8(最小インストール)Python3.8 + pipメソッドチュートリアルの新規インストール