Joe, keep in mind that a 64-bit Linux doesn't mean you'll be running a 64-bit JVM.
Can you add a -Dcom.sun.management.jmxremote 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 <[email protected]> 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 <[email protected]> >> 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 <[email protected]> >>>> 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 >>>>> >>>>> >>> >>> > >
