Blog スタッフブログ

システム開発

[サーバー系]プロセスのOOM Killerからの除外

システム開発担当のTFです。

※さくらのVPS centos stream 9 対応

※他のOS等では、細部が違うことがあります。

やり方

  • 除外したいプロセスのPIDを確認する
  • 確認したPIDのoom_score_adjに-1000を設定する( OOM Killerの対象から除外される )
  • 再起動時に自動的に除外されるように設定する( 今回は、httpd と mariadb )

メモ

メモリが足りなくなると、OOM Killerがメモリ確保のために優先度にしたがってプロセスを落としにかかる。
その優先度を-1000に設定することで、OOM Killerの対象から外す。
この設定で、必要なプロセスが落とされるのを防ぐ。

サンプル

OOM Killerからの除外

	// httpd のPIDの確認
	systemctl status httpd
	ps -ef | grep httpd

	// mariadb のPIDの確認
	systemctl status mariadb
	ps -ef | grep mysql

	// 下記{PID}は上記で確認したPIDの数値を入れる

	// 対象PIDの優先度設定の確認
	cat /proc/{PID}/oom_score_adj

	// 対象PIDの優先度を-1000 にしてOOM Killerの対象から外す
	echo -1000 > /proc/{PID}/oom_score_adj

httpd の再起動時用設定

	vi /usr/lib/systemd/system/httpd.service
				
		# [Service] 内に下記を追加
		OOMScoreAdjust=-1000
		
	// serviceを変更したため、設定の再読み込み
	systemctl daemon-reload
	// httpd の再起動
	systemctl restart httpd
	
	// 再度PIDを確認し、優先度が-1000になっているか確認

mariadb の再起動時用設定

	vi /usr/lib/systemd/system/mariadb.service
				
		# [Service] 内に下記を追加
		OOMScoreAdjust=-1000
		
	// serviceを変更したため、設定の再読み込み
	systemctl daemon-reload
	// mariadb の再起動
	systemctl restart mariadb
	
	// 再度PIDを確認し、優先度が-1000になっているか確認