Loading ...
Sorry, an error occurred while loading the content.
 

Re: Returning "::" causes out of memory error on Windows XP under ASPerl 5.6.1 B

Expand Messages
  • chesal
    Hi Peter. Thanks for the quick response. Some comments below... ... Yes. Although Windows is the only platform using the ActiveState distribution. Cygwin and
    Message 1 of 4 , Nov 23, 2005
      Hi Peter. Thanks for the quick response. Some comments below...

      --- In soaplite@yahoogroups.com, Peter Sinnott <psinnottie@a...> wrote:
      >
      > On Mon, Nov 07, 2005 at 09:07:24PM -0000, chesal wrote:
      > >
      > > On Linux and under Cygwin the approximatly 300kB of data is returned,
      > > parsed and printed by the script with barely any memory use at all.
      > >
      > > But the script, run ActiveState Perl 5.6.1 B633, ends up running out
      > > of memory.
      >
      > Are you using perl 5.6.1 on all 3 platforms?

      Yes. Although Windows is the only platform using the ActiveState
      distribution. Cygwin and Linux both use the Cygwin and RH9 binary
      packages respectivily.

      > > my $parsed = $self->decode($_[0]);
      > >
      >
      > Can you trace the execution any further?

      Yes. I worked down to the XML::Parser::parse() routine -- that's where
      memory starts to climb.

      The call to $self->decode_object() that occurs in the SOAP::Lite
      module right after the expat parsing does not increase memory. Memory
      use peaks (and never declines by much) in the XML::Parser::parse() call.

      It looks like it might be an issue with the expat parse on Windows.
      One thing that comes to mind is character encoding. While the data is
      pure ASCII text, perhaps I'm incurring a bunch of unecessary
      serialization/deserialization overhead in the XML payload of the SOAP
      call because there are character encoding mismatches. Is that a
      possibility? I couldn't see an easy way to indicate the encoding was
      ASCII text instead of UTF-8 when making the SOAP lite call. Is there?

      > > Does anyone know what it is with "::" that causes the deserializer
      > > such problem under Windows?
      > >
      >
      > Its a bit of a guess but XML::Parser::Lite is used to parse xml if
      > XML::Parser is not available.

      All three platforms have XML::Parser available. The ActiveState 5.6.1
      distribution shipped with it. Linux and Cygwin had the package added
      via cpan install call a long time ago.

      What I'm noticing is that in general memory consumption is orders of
      magnitude higher for ASPerl 5.6.1 SOAP::Lite calls than on any other
      platform. Even after dropping the '::' separators memory use is still
      climbing to ~50MB for approximately 1MB of data returned. It's all
      plain text data. Nothing particular interesting about it. There are no
      special character encodings. The data is a document with lines in the
      form:

      ^(\d+)\s(\d+)\s(\S+)\s(.*)

      The (.*) porition at the end can be up to 1024 characters long.
      Because it's all one document it's being returned to the result()
      storage point in the SOAP::Lite calling object. But I did try making
      it an array and returning the array, where each line was an element,
      instead of a flat document and then using result() and paramsout() and
      it made no difference. The memory is still being consumed by the
      deserialization.

      Any tips on reducing memory usage on Windows are greatly appreciated.
      Thanks.

      - Ian
    • Peter Sinnott
      ... If you can reduce the test case to some xml and calls to XML::Parser then maybe some perl xml mailing list can be of help. ... What version of XML::Parser
      Message 2 of 4 , Nov 23, 2005
        On Wed, Nov 23, 2005 at 03:53:29PM -0000, chesal wrote:
        >
        > Yes. I worked down to the XML::Parser::parse() routine -- that's where
        > memory starts to climb.
        >

        If you can reduce the test case to some xml and calls
        to XML::Parser then maybe some perl xml mailing list can be of help.

        >
        > All three platforms have XML::Parser available. The ActiveState 5.6.1
        > distribution shipped with it. Linux and Cygwin had the package added
        > via cpan install call a long time ago.
        >

        What version of XML::Parser do they each have?

        perl -e'use XML::Parser 10;'


        http://aspn.activestate.com/ASPN/Perl/Modules/

        http://aspn.activestate.com/ASPN/Modules?module_name=X&order=name&query_start=36

        lists XML::Parser as v2.30. The changelog on CPAN lists a memory leak
        fixed in 2.32. May not be the problem but no harm checking it out.


        --
        We exist to collaboratively network error-free paradigms while continuing
        to assertively foster virtual services while promoting personal employee
        growth
      Your message has been successfully submitted and would be delivered to recipients shortly.