I guess it's also worth saying that while Connectors can be cached, it's
not "necessary" like it is for other database connectors. The Accumulo
Connector is very light-weight and cheap to construct.
Josh Elser wrote:
z11373 wrote:
My questions:
1. Since I haven't killed that service instance yet, is it possible to
debug
and find out the culprit? 100x slower is too much. Is that expected? What
could be causing the slowness?
No, definitely not expected.
2. This makes me think caching Accumulo connector may not be a good idea.
Current implementation is the cache got refreshed if there's
exception. Slow
read won't trigger exception, so it stays in the cache. Is it
recommended to
not caching the Accumulo connector?
I don't think we have the means to tell you what went wrong, but perhaps
we can help you find some clues. The Connector has some internal
synchronization, but I would not have thought caching a Connector would
have such negative impact -- sounds like a bug.
* Try attaching a profiler to your service (e.g. Java Mission Control,
YourKit). These can help you connect to your running service and figure
out what is taking a long time.
* You can also go the "low-tech" route and take a few stackdumps (e.g.
`kill -3 <pid>` or `jstack`) on your service to see get an idea of where
it is spending time.
* Take a heap dump of the service (e.g. `jmap`). Perhaps there is a lot
of garbage sitting on the heap not being collected or there's a memory
leak.