松田さん

返信ありがとうございます。
こちらで調べた限りでは以下の通りです。

・「saveを実行したところで」と書かれていますが、newしただけではメモリはそんなに食わないのでしょうか?
問題ありません。
ファイルサイズが小さい場合や、文字列や数値のみの保存の場合も処理が遅くなることはありません。
 
・「数分間処理が戻ってきません」ということはCPUもイッちゃってる感じですか?だとしたらどのメソッド呼び出しででしょうか?
CPU100%です。
WinXP+JRuby1.5.6 + Rails2.3.5 + mongrel1.1.5で確認しています。
RHEL5.5+JRuby1.5.6+Rails2.3.5+Apache + mongrel1.1.5でも同様の問題が発生しています。
Rails2.3.10でも同様に遅いことを確認しました。
デバッグしたところ、ActiveSupport::CoreExtensions::Hash#to_xmlの129行目でとまっているようです。(コード抜粋です↓)
129:                  if value.respond_to?(:to_xml)
130:                   value.to_xml(options.merge({ :root => key, :skip_instruct => true }))
131:                  else
 
・JRubyをお使いとのことですが、XMLバックエンドは何が使われているのでしょうか?
すいません。よく分かっていません。。
Rails標準だと思うのですが。。
Rails以外にインストールしているgemは以下の通りです。
jruby-openssl
activerecord-jdbc-adapter
will_paginate
 
・CRubyでも同じ問題が発生しますか?
発生します。
CRuby1.8.7で確認致しました。
CRubyの方が多少処理が速いようです。が、実用には耐えません。。
(Marshal等もCRubyの方が速いのでそういうのも関係あるのでしょうか。。)

 
・同じXMLをファイルで保存しておいてconsole等でHash.from_xml してみたらメモリ消費量はどうでしょうか?
・ファイルサイズは同じぐらいでnode数は極端に少ないXMLを食わせてみたらどうなりますか?
すいません。私の伝え方が悪かったです。
ActiveResourceでのGETもPOSTも遅いです。
to_xmlの処理が終わらないので、from_xmlの確認できませんでした。。

attributes = Hash.new
attributes[:data] = params[:uploaded_data]
my_activeresource = MyActiveresource.new(attributes)
my_activeresource.save  #=> 遅くなります

my_activeresouce.to_xml  #=> to_xml単体でも同様に遅くなります


ActiveResourceは諦めるしかないでしょうか。。
宜しくお願い致します。


2011年1月29日8:52 Akira Matsuda <ronnie@dio.jp>:
松田といいます。

2011/1/28 y koshiyama <koshiyama.fb@gmail.com>:
> ActiveResourceに関して質問させて下さい。
> 現在、以下の環境でWebアプリケーションを開発しています。
> ■jruby1.5.6
> ■rails2.3.5
> また、発生する通信の概要は以下の通りです。
> クライアントPC ←→ Webサーバ1 ←(ActiveResource経由)→Webサーバ2 ←→ DB
> このとき、ActiveResource経由でファイルの送受信処理が発生するのですが、
> 数MB程度のファイルを送受信すると、(ActiveResourceインスタンス).saveを実行したところで処理が重くなります。
> 具体的にはメモリを数百メガバイト消費し始め、数分間処理が戻ってきません。
> これはActiveResourceの仕様なのでしょうか?

頂いた情報だけではなんとも言えないのですが、直感的にはXMLが怪しそうな気がします。
が、AResのXMLの実装は確かにだいぶ富豪気味ではあるのですが、そこまで実用に耐えないほどではないはずです。
たとえば以下のようにもう少し問題を切り分けていただくことは可能ですか?

・「saveを実行したところで」と書かれていますが、newしただけではメモリはそんなに食わないのでしょうか?
・「数分間処理が戻ってきません」ということはCPUもイッちゃってる感じですか?だとしたらどのメソッド呼び出しででしょうか?
・JRubyをお使いとのことですが、XMLバックエンドは何が使われているのでしょうか?
・CRubyでも同じ問題が発生しますか?
・同じXMLをファイルで保存しておいてconsole等でHash.from_xml してみたらメモリ消費量はどうでしょうか?
・ファイルサイズは同じぐらいでnode数は極端に少ないXMLを食わせてみたらどうなりますか?

--
Akira Matsuda<ronnie@dio.jp>

--
ML: rails@ruby.ml.fdiary.net
使い方: http://QuickML.com/