[#37959] [Bug:trunk] I can modify literals — Yusuke ENDOH <mame@...>

遠藤です。

13 messages 2009/02/10

[#38005] Is URI.decode() broken? — MOROHASHI Kyosuke <moronatural@...>

もろはしです。いつもお世話になっております。

39 messages 2009/02/14
[#38006] Re: Is URI.decode() broken? — Nobuyoshi Nakada <nobu@...> 2009/02/14

なかだです。

[#38009] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/02/14

成瀬です、

[#38016] Re: Is URI.decode() broken? — Fujioka <fuj@...> 2009/02/15

xibbarこと藤岡です。

[#38017] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/02/15

成瀬です。

[#38040] Re: Is URI.decode() broken? — akira yamada / やまだあきら <akira@...> 2009/02/17

NARUSE, Yui さんは書きました:

[#38124] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/03/03

成瀬です。

[#39214] Re: Is URI.decode() broken? — akira yamada / やまだあきら <akira@...> 2009/09/02

(2009年03月03日 22:45), NARUSE, Yui さんは書きました:

[#39218] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/09/02

成瀬です。

[#39236] Re: Is URI.decode() broken? — Tanaka Akira <akr@...> 2009/09/05

In article <4A9E44DD.6050706@airemix.jp>,

[#39242] Re: Is URI.decode() broken? — KOSAKI Motohiro <kosaki.motohiro@...> 2009/09/07

小崎@思いつきを適当に書いてみるテスト

[#39246] Re: Is URI.decode() broken? — Tanaka Akira <akr@...> 2009/09/07

In article <20090907091830.2C7A.A69D9226@jp.fujitsu.com>,

[#38096] 多重代入やメソッド引数の展開でto_aが呼ばれます — nagachika <nagachika00@...>

nagachika と申します。

10 messages 2009/02/26

[#38098] ブロック引数と括弧・引数なしsuper — Shugo Maeda <shugo@...>

前田です。

12 messages 2009/02/27

[ruby-dev:37936] zombie processes by drb tests

From: Tanaka Akira <akr@...>
Date: 2009-02-06 18:07:16 UTC
List: ruby-dev #37936
OpenBSD で、test-all をすると、drb のところで、テストに 100
秒かかってエラーになるというのが起きます。

...
TestDRbSafe1#test_05_break: 1.12 s: .
TestDRbSafe1#test_06_next: sh: cannot fork - try again
100.01 s: E
TestDRbSafe1#test_07_break_18: 100.00 s: E
TestDRbUNIXAry#test_01: 100.00 s: E
TestDRbUNIXAry#test_02_collect: 100.00 s: E
TestDRbUNIXAry#test_03_redo: 100.00 s: E
TestDRbUNIXAry#test_05_break: 100.01 s: E
TestDRbUNIXAry#test_06_next: 100.00 s: E
TestDRbUNIXAry#test_07_break_18: 100.00 s: E
TestDRbUNIXCore#test_00_DRbObject: 100.00 s: E
TestDRbUNIXCore#test_01: 100.00 s: E
TestDRbUNIXCore#test_01_02_loop: 100.00 s: E
TestDRbUNIXCore#test_02_unknown: 100.00 s: E
TestDRbUNIXCore#test_03: 100.01 s: E
TestDRbUNIXCore#test_04: 100.00 s: E
TestDRbUNIXCore#test_05_eq: 100.00 s: E
TestDRbUNIXCore#test_06_timeout: 100.00 s: E
TestDRbUNIXCore#test_07_public_private_protected_missing: 100.00 s: E
TestDRbUNIXCore#test_08_here: 100.00 s: E
TestDRbUNIXCore#test_09_option: 100.01 s: E
TestDRbUNIXCore#test_10_yield: 100.00 s: E
TestDRbUNIXCore#test_10_yield_undumped: 100.00 s: E
TestDRbUNIXCore#test_11_remote_no_method_error: 100.00 s: E
TestDRbYield#test_01_one: 100.00 s: E
TestDRbYield#test_02_two: 100.00 s: E
TestDRbYield#test_03_many: 100.00 s: E
TestDRbYield#test_04_many_to_one: 100.01 s: E
TestDRbYield#test_05_array_subclass: 100.00 s: E
TestDRbYield#test_06_taint: 100.00 s: E
TestDataConverters#test_builtin_all_nested_combo_converter: 0.01 s: .
TestDataConverters#test_builtin_date_converter: 0.00 s: .
TestDataConverters#test_builtin_date_time_converter: 0.00 s: .
...

調べてみると、どうも、drb のテストではゾンビプロセスがたくさ
んできるのが問題なようです。

% ps auxww|grep sh                                      
...
akr      28244  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      25870  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      12199  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      30743  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      16391  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr       6884  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      28045  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      19354  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      19739  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      15979  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      16803  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      18280  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      10880  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr        194  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr       7122  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      16748  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      28983  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr       3433  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      24743  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      10404  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr       7924  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      22668  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      30383  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr       7222  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
akr      20634  0.0  0.0     0     0 p0  Z+    -          0:00.00 (sh)
...

どうも、OpenBSD では (たぶん) デフォルトでプロセス数制限があっ
て、それ以上になっていると fork(2) が EAGAIN で失敗します。

具体的には、ulimit で表示させると maxproc が 64 と出てきます。

% limit
cputime         unlimited
filesize        unlimited
datasize        512MB
stacksize       4MB
coredumpsize    unlimited
memoryuse       1970MB
memorylocked    658MB
maxproc         64
descriptors     128

そして、ruby は fork(2) が EAGAIN になったとき、再
挑戦します。

この
* プロセス数制限
* drb がゾンビプロセスを作りっぱなしにする
というのが組み合わさると、いつまでたっても fork は失敗し続け
るので、timeout の 100秒まで待つことになる、ということのよう
です。

この状態では外部から (そのユーザで?) ログインも出来ないとい
う不幸なことになります。

drb でプロセスを作っているのは lib/drb/extservm.rb の
invoke_service_command で呼んでいる spawn で、これが返す pid
は使われていないようです。

pid を記録しておいて、後始末をするときに wait するのが適切だ
と思うんですが、どうでしょうか。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next