Ard Schrijvers wrote:

<snip/>
- introduce a maxPersistentObjects parameter and use it in EHDefaultCache to set maxElementsOnDisk

+1

that's easy

  - make the registration of stores at StoreJanitor configureable
    (Though I wonder what the default value should be, true or false?)

0 : I would avoid the StoreJanitor to run anyway

I suggest that we don't register them at StoreJanitor by default anymore but make it configureable for users who rely on it in their custom Store implementations/configurations.

AFAIU, StoreJanitor only runs if at least one store is registered so we don't have to remove it.

  - fix EventRegistry

+1: I have fixed this locally to let it work also when cache entries are 
removed by the internals of the cache
I did this, by instead of using the AbstractDoubleMapEventRegistry use 
WeakReferences, so that when the cache keys
aren't present anymore, the JVM itself cleans the Registry. Two problems:

1: I removed the persistent cache between JVM retarts, but could rebuild this 
(at the cost of long start up times though)
2: With former versions of EHCache, my weakreferences where not honoured when 
cache entries where overflowed to disk.
Therefor, I thought EHCache might be doing something with the cachekey when moving to the disk cachekey map. I could only see this behavior in combination with Cocoon, and not when I tested EHCache seperatly. On the EHCache userlist, Greg told me that it was not possible, and also showed it. I am using now JCSCache, which I am pretty ok with (only hard configuration)

If by the way, we start fixing the others, like setting a maxdiskobjects, the OOM due to event registry will increase. This is a problem from MultiHashMap (also the not deprecated replacer) that when you do:
map.put("1","test");
map.put("1","test");

you have two values for key "1".

I have to learn more about the EventRegistry in order to comment on your suggestions.

Any further ideas?

Hmmm, yes, but I am not sure wether others like it: I think, it might be good, 
that
when the StoreJanitor runs, there should be at least an info (error level...? I frequently want to give info in messages which is so important, that it must be at error level to not be missed, but this is stupid, right?)

WARN should be good enough IMO.

message about possible problems:

either:
1) your JVM memory settings are too low

ok

2) your stores are configured to have too many memory items

ok

3) your cached objects are very large

ok

4) you have a memory leak in some custom component (a little vague yes :-) )
....etc

hehe, if we can implement an algorithm that can provide such analysis reliably, why not ;-)

Are you suggesting some kind of online monitor? I think having a seperate component would be better than merging it into StoreJanitor. This component could also be made available as MBean.

Try runnning a crawler (xenu) and watch your status page memory useage.

Another improvement might be trying to avoid binary readers putting entries in memory cache. But, this might be to complex for the average user. In principal, I have have been bugging everybody here to:

1) use readers in *noncaching* pipelines, and use appropriate expires times in 
the readers, very important
for fast pages because browsers  honour the expires time
2) we also read binaries from our repository: these obviously need to be 
cached, but what if it are mp3 files
of 15 Mb a piece? Storing this in a normal store...so, I added a protocol, 
cached-binary: which in our
setup uses a different store which is configured to have no memory part, only disk cache. Then again, perhaps the thing above isn't something we can code

definitly

(except for changing some things regarding having multiple event registries), but...perhaps I should wikify it for the advanced useage? It is though quite some stuff.

Sometimes people have complained to me that
1) cocoon caching is difficult
2) why nobody explained before how cachekeys work, the status generator cachekey overview, how validities work, etc etc

But, I doubt if there are frameworks around where you get so much ingenious 
caching for free,
where 95% of the users never have to know about it. And, indeed, when you want 
to run sites
with > 100.000 pages, you indeed need to know more about it. I do think that is normal.

same opinion here

I think it is brilliant of cocoon that we run sites of 100.000 pages with many 
users and editors,
which never go down and run everything live with eventcache, and have response 
times when cached of within
32 ms (and my latest setups (a skeleton generator with standard conf and sitemaps even go to 0-15 ms)). I did not get this for free. It took me around 3 months to have everything configured/rebuild/added and understood correctly. I am not sure about the best way to have it for free for everybody, without needing to understand it all (or at least get proper info about it).
WDOT?

yes please, I would be interested in more comments too! Are Ard and I right that we shouldn't register EHDefaultStore and MRUMemoryStore at StoreJanitor anymore by default and make it configureable instead?

Ard


P.S. Ard, answering to your mails is very difficult because there are no line breaks. Is anybody else experiencing the same problem or is it only me?

I am now for the moment putting in line breaks by enter, but probably doesn't make it any better, is it? Sry if yes, I will try to start using Thunderbird if still a problem

the formatting is okay now, but it seems that your mails still don't set the in-reply-to header correctly.

--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}

                                       web(log): http://www.poetz.cc
--------------------------------------------------------------------

Reply via email to