[#42851] Object#define_singleton_method がない?? — take_tk <ggb03124@...>

たけ(tk)です

14 messages 2006/10/06
[#42852] Re: Object#define_singleton_method がない?? — Yukihiro Matsumoto <matz@...> 2006/10/06

まつもと ゆきひろです

[#42853] Re: Object#define_singleton_method がない?? — take_tk <ggb03124@...> 2006/10/06

たけ(tk)です。

[#42870] system の実行タイミングのトラブル — "Hideo Konami" <konami@...>

小波です。

18 messages 2006/10/14
[#42874] Re: system の実行タイミングのトラブル — "Hideo Konami" <konami@...> 2006/10/14

小波です。

[#42876] Re: system の実行タイミングのトラブル — cuzic <cuzic@...> 2006/10/14

cuzic です。

[#42885] apt-listbugs: soap4r での悩み — Junichi Uekawa <dancer@...>

ruby-list のみなさま、

21 messages 2006/10/16
[#42891] Re: apt-listbugs: soap4r での悩み — "NAKAMURA, Hiroshi" <nakahiro@...> 2006/10/17

-----BEGIN PGP SIGNED MESSAGE-----

[#42892] Re: apt-listbugs: soap4r での悩み — Junichi Uekawa <dancer@...> 2006/10/17

こんにちは、

[#42896] Re: apt-listbugs: soap4r での悩み — "NAKAMURA, Hiroshi" <nakahiro@...> 2006/10/17

-----BEGIN PGP SIGNED MESSAGE-----

[#42929] Re: 括弧なしsuperで引数が引き継がれない — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

17 messages 2006/10/31
[#42930] Re: 括弧なしsuperで引数が引き継がれない — "U.Nakamura" <usa@...> 2006/10/31

こんにちは、なかむら(う)です。

[#42931] instant rails インストール! irbを起動するには? — "Uema Tsuyoshi" <mugenkai15@...> 2006/10/31

上間といいます。

[#42933] Re: instant rails インストール! irbを起動するには? — "きむらこういち" <hogemuta@...> 2006/10/31

木村です。

[#42937] Re: instant rails インストール! irbを起動するには? — "Uema Tsuyoshi" <mugenkai15@...> 2006/10/31

上間です。

[ruby-list:42910] Re: apt-listbugs: soap4r での悩み

From: Junichi Uekawa <dancer@...>
Date: 2006-10-18 14:39:50 UTC
List: ruby-list #42910
こんにちは、

> > apt-listbugs:
> > VIRT 203MB (仮想メモリ)
> > RES 173MB (実メモリ)
> >
> > よくみなおしてみると、ダウンロードされる XML データは、 1MB ありま
> > した。1MB の XMLで 170MB のメモリ消費であれば、170倍ですね。10000倍は
> > いいすぎました。
>
> 置いていただいたSOAPレスポンスを以下のクライアントにかけたところ、手元で
> はVIRT 75MBでした(FC5 + ruby 1.8.5 (2006-10-16) [i686-linux])。

これで気づいたのですが、

Debian GNU/Linux sid + ruby 1.8.5 (2006-08-25) [x86_64-linux]

で、 64bit なので、まったく同じ結果にはならないだろうと推察しています。


>   client = SOAP::RPC::Driver.new("http://dummy")
>   client.test_loopback_response << File.read("apt-listbugs-soap4r.xml")
>   obj = client.add_method("dummy").call
>   # objをMarshal.dumpすると600kB。
>
> この数値は、先のeBayでの例(1MBのXMLで90MBメモリ消費)とそれほど遠くあり
> せん。
>
> というわけでまず、200Mと75Mの違いの原因を探りたいです。
>
>  (1) 上川さん環境で上記コードを実行すると、メモリをどれだけ消費しますか?
>  (2) 203MB消費する簡単なサンプルを作れますか?
>
> サーバ側はPerlでHash渡しのようですから、BugStatusクラスを定義しているわ
> けでもないですよね。(確認)

そうだと思います

SOAPを処理しているソースコードは:
http://git.debian.org/?p=apt-listbugs/apt-listbugs.git;a=blob;f=lib/debian/btssoap.rb

該当する部分は:

require 'soap/rpc/driver'
require 'debian/bug'

module Debian
  module BTSSOAP
    class StringArray < Array; end
    class Soap
      def initialize(host = "bugs.debian.org", port = 80)
        @server="http://#{host}:#{port}/cgi-bin/soap.cgi"
        @ns = 'Debbugs/SOAP/Status'
        @drv = SOAP::RPC::Driver.new(@server, @ns)
        @drv.wiredump_dev = STDOUT if $DEBUG
        @drv.add_method('get_status','bugnumber')
        @drv.options["protocol.http.connect_timeout"] = 999
        @drv.options["protocol.http.send_timeout"] = 999
        @drv.options["protocol.http.receive_timeout"] = 999

        # define StringArray
        @map = SOAP::Mapping::Registry.new
        @map.set(StringArray, SOAP::SOAPArray,
                SOAP::Mapping::Registry::TypedArrayFactory,
                { :type => XSD::XSDString::Type })
        @drv.mapping_registry = @map
      end

      def get_status(sa)
        get_status = Debian::Bugs.new
        if sa.size == 0
          puts "No bugs to fetch" if $DEBUG
        else
          puts "fetching #{sa.join(" ")}.. " if $DEBUG
          @drv.get_status(sa).each { |bugnum, res|
            newbug=Debian::Bug.new(res.package,
                                   bugnum.to_s,
                                   res.severity,
                                   res.pending,
                                   res.subject,
                                   res.tags.split(" "),
                                   res.mergedwith.to_s.split(" "),
                                   Time::at(res.date.to_i))
            p res if $DEBUG
            newbug.found=res.found.keys.join(" ") if res.found.kind_of?(Hash)
            newbug.fixed=res.fixed.keys.join(" ") if res.fixed.kind_of?(Hash)
            get_status << newbug
          }
        end
        get_status
      end
    end
  end
end



です。

上川
--
dancer@{debian.org,netfort.gr.jp}   Debian Project

In This Thread