Thanks Jay Booth,

I thought as much. I just verified that I'm not reaching 100% CPU, and I
found out that when using RAMDirectory and 100 threads the CPU usage is 60%,
avarage request time 40 times more that one thread, but number of requests
the same. I think I'll have to do somthing like you suggested. Any thoughts
about adding this functionality to Lucene core?

Thanks again,
Oren Shir

On 11/21/05, Jay Booth <[EMAIL PROTECTED]> wrote:
>
> I had a similar problem with threading, the problem turned out to be that
> in
> the back end of the FSDirectory class I believe it was, there was a
> synchronized block on the actual RandomAccessFile resource when reading a
> block of data from it... high-concurrency situations caused threads to
> stack
> up in front of this synchronized block and our CPU time wound up being
> spent
> thrashing between blocked threads instead of doing anything useful.
>
> Making multiple IndexSearchers and FSDirectories didn't help because in
> the
> back end, lucene consults a singleton HashMap of some kind (don't remember
> implementation) that maintained a single FSDirectory for any given index
> being accessed from the JVM... multiple calls to FSDirectory.getDirectory
> actually return the same FSDirectory object with synchronization at the
> same
> point.
>
> Our solution was to subclass FSDirectory to skip this lookup step, and
> then
> create several distinct FSDirectories reading the same index. This was in
> a
> read only context so it worked out for us, although memory consumption was
> higher... we put a pooling class in front of the whole thing and added a
> refresh method to re-instantiate the IndexSearchers and associated
> FSDirectories when the index was modified... we also needed some
> catch(FileNotFoundException) blocks to hack around the case where the
> index
> was being modified while an IndexSearcher was trying to search.
>
> -----Original Message-----
> From: Yonik Seeley [mailto:[EMAIL PROTECTED]
> Sent: Monday, November 21, 2005 11:08 AM
> To: java-user@lucene.apache.org; [EMAIL PROTECTED]
> Subject: Re: Throughput doesn't increase when using more concurrent
> threads
>
>
> On 11/21/05, Oren Shir <[EMAIL PROTECTED]> wrote:
> > It is rather sad if 10 threads reach the CPU limit. I'll check it and
> get
> > back to you.
>
> It's about performance and throughput though, not about number of
> threads it takes to reach saturation.
>
> In a 2 CPU box, I would say that the ideal situation is where it only
> takes two threads to reach 100% CPU utilization. Normally it takes
> more because of some kind of IO (disk or network).
>
> -Yonik
> Now hiring -- http://forms.cnet.com/slink?231706
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to