[Gc] Interesting behavior under heavy I/O load...not sure I can do
anything about it.
Gtalbot at ansarisbio.com
Thu Dec 3 08:08:37 PST 2009
I've got a program that uses the GC that can do pretty heavy I/O (a distributed filesystem daemon), and I just noticed something interesting. I had a node that was taking quite a while to respond to a keepalive request, so I broke into it with the debugger.
What I saw was that GC was trying to stop the world and was waiting for the semaphore that tells it that all the other threads are stopped. All the other threads were stopped, except for one that was waiting in an fsync() call.
I was kinda surprised to see that GC could possibly be blocked waiting for I/O, but I guess it's not too surprising. The process will eventually recover when fsync() finishes, then GC finishes, but I have had extreme cases where things time out because of this.
Is there anything that I could do about this, do you think, short of avoiding fsync(), which I need for consistency purposes? I.e. is it possible to decouple I/O with GC in this sort of case?
George T. Talbot
<gtalbot at locuspharma.com>
More information about the Gc