Details
-
Improvement
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
-
None
Description
It is not uncommon to find "java.lang.OutOfMemoryError: unable to create new native thread" errors in a HDFS cluster. Most often this happens when DataNode creating DataXceiver threads, or when balancer creates threads for moving blocks around.
In most of cases, the "OOM" is a symptom of number of threads reaching system limit, rather than actually running out of memory, and the current logging of this message is usually misleading (suggesting this is due to insufficient memory)
How about capturing the OOM, and if it is due to "unable to create new native thread", print some more helpful message like "bump your ulimit" or "take a jstack of the process"?
Even better, surface this error to make it more visible. It usually takes a while for an in-depth investigation after users notice some job fails, by the time the evidences may already been gone (like jstack output).