Re: Memory Management using Tomcat

From: Joe Baldwin (jfbaldwi..arthlink.net)
Date: Wed Sep 16 2009 - 15:15:42 EDT

  • Next message: Joe Baldwin: "Re: Memory Management using Tomcat"

    Michael,

    Thanks for responding so fast (I appreciate it).

    1. The box is shared but the Tomcat server is dedicated to my project
    only.
    2. The box is 64 bits (Linux 2.6.25-14.fc9.x86_64 (amd64))
    3. They have three plans available: 64MB, 128MB, and 256MB

    Since we only have one - two users right now I selected 64MB until it
    goes live. But based on the recommendations today, we are immediately
    upgrading to 128MB.

    FYI: I have only about 500 products (and am anticipating 5000
    products). I do not use any BLOB's in the database (we only use file
    system references to pictures and audio). So I am very concerned that
    I missed something fundamental (if you are able to handle 10,000
    objects easily).

    Questions:
    1. The WebHost POC asked me to ask you for a recommendation for Xmx.
    2. In the event I made a programming error: please let me know how to
    properly release the memory from a result set (ArrayList) in this
    scenario. I am a tad confused with the BaseContext management and
    could have made a mistake there.

    Thanks,
    Joe

    PS other than this Memory Management issue Cayenne 3M6 has been rock-
    solid!!

    On Sep 16, 2009, at 2:57 PM, Michael Gentry wrote:

    > Is your hosting company giving you a private dedicated box (or VM) or
    > is your application shared with other applications running in Tomcat?
    > If the latter, that would skew things, I think. Also, if you are
    > running a 64-bit JVM, then it'll use more memory. It won't be 2x
    > more, but it'll be more.
    >
    > In your Cayenne Model, under the DataDomain, what is the size of your
    > object cache?
    >
    >
    > On Wed, Sep 16, 2009 at 2:49 PM, Joe Baldwin
    > <jfbaldwi..arthlink.net> wrote:
    >> Caveat: Apparently I am not as well. :)
    >>
    >> 1.) I looked at the 65M issue. On my development box (OSX) I set
    >> it to
    >> -Xms128m -Xmx128m (basically arbitrary). So when I went to the
    >> remote
    >> hosting company, I purchase a similar amount.
    >> a. However, we are doing *very* little work (lots of product
    >> fetches
    >> and only a few product inserts and updates) and it runs out of
    >> memory *very*
    >> fast which I *assume* means it is my code, but I don't know.
    >> b. I am doing research and here is a "web
    >> recommendation" (for all
    >> that is worth)
    >> Whenever possible, Unidata recommends
    >> -Xmx1500m for 32-bit systems, and -Xmx2048m --Xmx4096m for
    >> 64-bit
    >> systems.
    >> c. Since the host is 64-bit, I am wondering whether my
    >> assumptions
    >> may be off for 64-bit systems.
    >>
    >> 2. DataContext: Sorry, but I am getting confused on this one. I am
    >> using
    >> BaseContext.getThreadObjectContext() based on recommendations (I
    >> converted
    >> all the old DataContext refs to BaseContext, but I don't really
    >> understand
    >> it from reading the docs) and am *not* releasing it at the end of
    >> session.
    >> Not quite sure of how to do this properly.
    >>
    >> 3. Don't know how to set the cache to retain N number of objects. I
    >> experimented with
    >> query.setPageSize(RowsPerPage);
    >> query.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
    >> query.setCacheGroups("product", "ProductList");
    >>
    >> This seemed to help quite a bit but I still eventually ran out of
    >> memory. I
    >> recently removed *all* the SHARED_CACHE and it ran out of memory
    >> very fast.
    >>
    >> Thanks for your input
    >> Joe
    >>
    >>
    >>
    >> On Sep 16, 2009, at 2:25 PM, Mike Kienenberger wrote:
    >>
    >>> Caveat: I'm not really an expert on Cayenne memory management.
    >>>
    >>> 1) Are you allocating enough heap memory to the app server to start
    >>> with? I don't know what the default is these days, but in the old
    >>> days, an application by default only gets 64Mb of memory -- that's
    >>> pretty small.
    >>>
    >>> 2) Are you using a new DataContext per request? Or at least per
    >>> session?
    >>>
    >>> 3) I seem to remember that the cache strategy is configurable. Have
    >>> you configured a cache that only retains N number of objects for a
    >>> suitable value of N?
    >>>
    >>> On Wed, Sep 16, 2009 at 2:11 PM, Joe Baldwin <jfbaldwi..arthlink.net
    >>> >
    >>> wrote:
    >>>>
    >>>> Hi,
    >>>>
    >>>> I have asked this question a number of ways but I still have a very
    >>>> serious
    >>>> problem with Cayenne-specific memory management configuration
    >>>> associated
    >>>> with Tomcat.
    >>>>
    >>>> The problem with debugging is that given that I have very little
    >>>> visibility
    >>>> into the Cayenne memory management it is extremely difficult to
    >>>> debug
    >>>> this
    >>>> using conventional strategies. Also I am not requesting anything
    >>>> from
    >>>> the
    >>>> system that is terribly exceptional so I am attempting to use
    >>>> default
    >>>> settings as much as possible.
    >>>>
    >>>> My strategy is to ask the experts for a Cayenne configuration and
    >>>> standard
    >>>> memory management steps I should take to conform to the new Cayenne
    >>>> memory
    >>>> management design intentions.
    >>>>
    >>>> Problem:
    >>>> 1. I have essentially a webstore, three tier design with Tomcat,
    >>>> Cayenne
    >>>> and
    >>>> MySQL.
    >>>> 2. When after only a few queries of products, tomcat freezes up and
    >>>> reports
    >>>> out of memory errors.
    >>>>
    >>>> I have attempted to configure the caching strategy ask best as I
    >>>> can
    >>>> understand from the docks but this only gets me a few more hours
    >>>> of usage
    >>>> before the out of memory errors. (I tried the SHARED_CACHE). The
    >>>> NO_CACHE
    >>>> strategy is worse.
    >>>>
    >>>> I would appreciate a set of steps (aka a primer) that should
    >>>> handle a
    >>>> website with a lot of fetches of hundreds of data objects (i.e.
    >>>> products)
    >>>> and very few updates.
    >>>>
    >>>> Note: My gut feeling is that I am not properly managing the data
    >>>> object
    >>>> array properly and it is leaking memory.
    >>>>
    >>>> I would appreciate any input, but I would first like to know what
    >>>> the
    >>>> minimum require steps are for managing at data object result set
    >>>> ArrayList
    >>>> so as to properly cache and then properly free the memory after
    >>>> it is no
    >>>> longer needed.
    >>>>
    >>>> Context: Tomcat, MySQL, Cayenne 3.0M6
    >>>>
    >>>> Thanks,
    >>>> Joe Baldwin
    >>>>
    >>>>
    >>
    >>



    This archive was generated by hypermail 2.0.0 : Wed Sep 16 2009 - 15:16:19 EDT