Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

カーネルがプロセスを勝手にkill!?

9 views
Skip to first unread message

hanaji

unread,
May 27, 2003, 8:59:47 PM5/27/03
to
おはようございます。

TurboLinux6を使っています。uname -a の結果は
Linux sv 2.2.18-2 #1 Wed Mar 14 12:38:41 JST 2001 i686 unknown
です。

radiusを使ってサービスを提供しているのですが、ある日突然 radiusが
落ちていました。 syslogを見ると
May 27 20:57:07 sv kernel: VM: killing process radiusd
とあり、確かに radiusd が KILL されています。
その後、 sendmail も同様にKILLされていますが、他のデーモンは生きていました。
しかし、何故 radiusd は KILLされてしまったのでしょうか?
また、何故 radiusd と sendmail だけがKILLの対象になったのでしょう?

皆様方、ご教示願います。

一応、その近辺のログを下記に記します。
May 27 20:57:41 sv03 last message repeated 2 times
May 27 20:58:02 sv03 last message repeated 3 times
May 27 21:31:07 sv03 kernel: VM: killing process sendmail
May 27 21:37:09 sv03 kernel: VM: killing process ESMntserver

hanaji

unread,
May 28, 2003, 4:48:24 AM5/28/03
to
こんにちは。

"IKEDA Shigeru (rot13 encoded)" <puvg...@lnubb.pbz> wrote in message
news:87llwr7...@orange.js3guj.ampr.org...


> "hanaji" <han...@clubaa.com> writes:
>
> | しかし、何故 radiusd は KILLされてしまったのでしょうか?
> | また、何故 radiusd と sendmail だけがKILLの対象になったのでしょう?

> プロセスに割りあてられたリソースの制限を越えると kill される
> ことがあると思います。

んー。そんなことがあるのですか・・・。
1つ1つのプロセスのリソースが溢れそうになるのを事前に察知
する事はできるのでしょうか?
それが出来れば緊急メールを投げるスクリプトででも書けますが。


> | 一応、その近辺のログを下記に記します。
> | May 27 20:57:41 sv03 last message repeated 2 times
> | May 27 20:58:02 sv03 last message repeated 3 times
> | May 27 21:31:07 sv03 kernel: VM: killing process sendmail
> | May 27 21:37:09 sv03 kernel: VM: killing process ESMntserver

> *last message* そのものに原因が出力されているのではないかと思います。

ログの引用を間違えました。 radiusd の部分が抜けていますね。
May 26 23:49:31 sv03 PAM_pwdb[23611]: (ssh) session closed for user hoge
May 27 20:57:07 sv03 kernel: VM: killing process radiusd


May 27 20:57:41 sv03 last message repeated 2 times
May 27 20:58:02 sv03 last message repeated 3 times
May 27 21:31:07 sv03 kernel: VM: killing process sendmail
May 27 21:37:09 sv03 kernel: VM: killing process ESMntserver

May 27 22:24:52 sv03 sshd[29574]: Accepted password for hoge from
172.16.123.253 port 1211

radiusへのアクセスが多すぎて kill されてしまったのでしょうか?

---
hanaji @ clubaa.com

MOCHIDA Shuji

unread,
May 28, 2003, 6:03:35 AM5/28/03
to

持田@NETside です。

> May 27 21:31:07 sv03 kernel: VM: killing process sendmail

Web でちょっと探した限りでは、overcommit で実メモリ + スワップの
枯渇が原因かと思います。それで、スワップを増やせば解決するかも
知れないですし、ここの以前の前田さんの記事

http://search.luky.org/fol.2001/msg00337.html

にありますが、

| Linux 2.2以降では、/proc/sys/vm/overcommit_memory に1を書き込むと
| overcommit動作をするようになりますが、デフォルトではovercommitしません。

とあるように、/proc/sys/vm/overcommit_memory を 1 にしなければいいのかも
知れません。
# またデフォルト変わったんでしょうか?

> 1つ1つのプロセスのリソースが溢れそうになるのを事前に察知
> する事はできるのでしょうか?

overcommit の場合はそれは難しいです。

> radiusへのアクセスが多すぎて kill されてしまったのでしょうか?

VM が「やばい」と判断した後にじたばたしたプロセスが(適切な
アルゴリズムによって選ばれて)kill されます。

overcommit なしなら malloc() の時点でエラーになるので、
"VM: killing process" は出ないですよね? > 詳しい方

--
持田 修司 NETside Technologies Inc.
-- Equal Opportunity for All Good Architectures, NetBSD. --

Ichiya KAMIKI

unread,
May 28, 2003, 9:39:52 AM5/28/03
to
かみきと申します。

詳しくないですけど、この話、もすこし突っ込みたいので。
# linux/mm/mmap.c のリソースチェックの計算式の意味が分からんです ...。


MOCHIDA Shuji <moc...@netside.co.jp> writes:
> | Linux 2.2以降では、/proc/sys/vm/overcommit_memory に1を書き込むと
> | overcommit動作をするようになりますが、デフォルトではovercommitしません。

...


>
> overcommit なしなら malloc() の時点でエラーになるので、
> "VM: killing process" は出ないですよね? > 詳しい方

少なくとも linux 2.4.18 では /proc/sys/vm/overcommit_memory が 0 でも
おおむね

「空き実メモリ + 空きスワップ領域」 > 確保しようとする領域

をチェックしてるだけです。
# overcommit_memory が 1 だとチェックもしないので、
# そういう意味では overcommit かどうかを定めるフラグになっていますが ...

mmap or malloc しても左辺は変わらないので、これを複数回繰り返すと
「実メモリ + スワップ」以上の領域が確保できてしまいます。

つまり "VM: killing process" が出ることがありえます。
... 元々の記事はそれだからこれが出てるんでは。


mmap(2) の MAP_NORESERVE の項:

MAP_NORESERVE
(MAP_PRIVATE とともに使用される。) このマッピングに対するスワップ空間の
ペ ー ジ を予約しない。スワップ空間を予約した場合は、このプライベートな
copy-on-write (書き込み時コピー)領域の変更が必ず成功することが保証さ れ
る。 予約を行わなかった場合は、メモリに空きがないと書き込み時に SIGSEGV
エラーを受け取ることがある。

「copy-on-write 領域の変更が必ず成功することが保証される」というのは、
暗黙のうちに「他のプロセスを殺してでも ...」ということも含んでるんでしょうか。
「予約」してもどのリソースも減ってないように見えるんですが ...

--
かみきいちや

MAEDA Atusi

unread,
May 28, 2003, 10:19:20 AM5/28/03
to
前田です.

MOCHIDA Shuji <moc...@netside.co.jp> writes:

> http://search.luky.org/fol.2001/msg00337.html
>
> にありますが、
>
> | Linux 2.2以降では、/proc/sys/vm/overcommit_memory に1を書き込むと
> | overcommit動作をするようになりますが、デフォルトではovercommitしません。
>
> とあるように、/proc/sys/vm/overcommit_memory を 1 にしなければいいのかも
> 知れません。
> # またデフォルト変わったんでしょうか?

や,その時にも出ていた話題だと思いますが,2.2.xカーネルでは,fork(2)につい
てはovercommitを完全に止めることはできないのでした.
http://search.luky.org/fol.2001/msg00348.html

2.4.19以降では改善されて,forkもちゃんとチェックされているようです.
また,より厳しくチェックするモードがつきました.

Documentation/vm/overcommit-accountingによると,
0 - Heuristic overcommit handling. (あからさまなovercommitは拒否.
でも,後で死ぬかも.)
1 - No overcommit handling. (チェックしない.)
2 - strict overcommit. (ほとんど全ての場合overcommitしないはず.)
3 - paranoid overcommit. (絶対overcommitしない.ページにアクセスしてプロ
セスがkillされたらバグなので報告してください.)
だそうです.

> > 1つ1つのプロセスのリソースが溢れそうになるのを事前に察知
> > する事はできるのでしょうか?
>
> overcommit の場合はそれは難しいです。

1つ1つのプロセスのリソースの問題でなく,システム全体の合計の問題なので,
個々のプロセスがローカルに知るのは難しいです.カーネルがチェックしない
と.2.2.xではどうやっても無理です.

> overcommit なしなら malloc() の時点でエラーになるので、
> "VM: killing process" は出ないですよね? > 詳しい方

2.2.xでは残念ながら,他のプロセスのせいでメモリが足りなくなって,罪の
ないプロセスが殺されてしまうことは防げません.

2.4.19以降を使って,さらに,確実にするには,
# echo 3 > /proc/sys/vm/overcommit-memory
または,
# /sbin/sysctl -w vm.overcommit-memory=3
として下さい.(スワップ領域は十分に取って下さい.)

前田敦司

Ichiya KAMIKI

unread,
May 29, 2003, 9:14:59 AM5/29/03
to
ノーマルと ac 系列の区別くらいしてほしい ...

MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes:
> 2.4.19以降では改善されて,forkもちゃんとチェックされているようです.
> また,より厳しくチェックするモードがつきました.
>
> Documentation/vm/overcommit-accountingによると,
> 0 - Heuristic overcommit handling. (あからさまなovercommitは拒否.
> でも,後で死ぬかも.)
> 1 - No overcommit handling. (チェックしない.)
> 2 - strict overcommit. (ほとんど全ての場合overcommitしないはず.)
> 3 - paranoid overcommit. (絶対overcommitしない.ページにアクセスしてプロ
> セスがkillされたらバグなので報告してください.)
> だそうです.

↑になってるのは 2.5.x, 2.4.x-ac だけです。

とくに、 paranoid overcommit があるのは 2.4.19 以上の ac パッチのものに限られます。
# 2.5.x の ac にも入ってない。なんでやねん ...。


> 2.2.xでは残念ながら,他のプロセスのせいでメモリが足りなくなって,罪の
> ないプロセスが殺されてしまうことは防げません.

というわけで、このあたりは(ノーマルの) 2.4.x でも変わってません。

--
かみきいちや

MAEDA Atusi

unread,
May 29, 2003, 10:40:34 AM5/29/03
to
kam...@geocities.com (Ichiya KAMIKI) writes:

> ノーマルと ac 系列の区別くらいしてほしい ...

はあ.すみません.
何のことか分かってません.
ノーマルっていう言い方ははじめて聞きました.

> ↑になってるのは 2.5.x, 2.4.x-ac だけです。

えーっと,Vine 2.6CR (kernel-2.4.19-0vl11) を使っているのですが,
Documentation/vm/overcommit-accounting には書いてあるけど,これは嘘で,
実はまだ何も実装されていないということですか?

それともVine 2.6CRで使ってるのがac系列だと言うことですか?

前田敦司

F.M.

unread,
May 29, 2003, 12:23:20 PM5/29/03
to

MAEDA Atusi <ma...@cc.tsukuba.ac.jp> writes:

> kam...@geocities.com (Ichiya KAMIKI) writes:
>
> > ノーマルと ac 系列の区別くらいしてほしい ...
>
> はあ.すみません.
> 何のことか分かってません.
> ノーマルっていう言い方ははじめて聞きました.


http://www.kernel.org/acpatch.html より

| The -ac patches to the Linux kernel
|
| The -ac patches are a set of patches, released by Alan Cox, against the
| official kernel series. They are frequently more experimental in nature than
| the official series. These patches are available in Alan's kernel directory:
|
| /pub/linux/kernel/people/alan/

かみきさんは official 版をノーマルと言っているのでしょう.



> > ↑になってるのは 2.5.x, 2.4.x-ac だけです。
>
> えーっと,Vine 2.6CR (kernel-2.4.19-0vl11) を使っているのですが,
> Documentation/vm/overcommit-accounting には書いてあるけど,これは嘘で,
> 実はまだ何も実装されていないということですか?
>
> それともVine 2.6CRで使ってるのがac系列だと言うことですか?

後者ではないでしょうか.

http://vinelinux.org/errata/25x/20021112-4.html より

| この修正には、
| - 2.4.20-rc1 への更新 / ac パッチの削除
(略)
| などが含まれています。

つまり,この修正までは ac パッチが含まれていたということでしょう.
# rc = Release Candidate. www.kernel.org によれば the latest prepatch.


official 版の Documentation/vm/ には 2.4.19, 2.4.20 共に

balance locking numa

の3つのファイルしかありません.

[end of text]

0 new messages