cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Gentry <>
Subject Re: Memory Management using Tomcat
Date Wed, 16 Sep 2009 20:52:52 GMT
Joe, keep in mind that a 64-bit Linux doesn't mean you'll be running a
64-bit JVM.

Can you add a to your VM startup
arguments for Tomcat and then use JConsole to connect to it?

On Wed, Sep 16, 2009 at 3:15 PM, Joe Baldwin <> wrote:
> 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 <>
>> 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 <>
>>>> 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

View raw message