ConfX created HDFS-17096:
----------------------------
Summary: Out of memory exception when mistakenly set
ipc.server.read.threadpool.size to a large value
Key: HDFS-17096
URL: https://issues.apache.org/jira/browse/HDFS-17096
Project: Hadoop HDFS
Issue Type: Bug
Reporter: ConfX
Attachments: reproduce.sh
h2. What happened:
When setting {{ipc.server.read.threadpool.size}} to a large number,
{{IPCServer}} throws an out-of-memory exception due to inappropriate checking
and handling.
*There is no checking or error-handling logic for this parameter at all.*
h2. Buggy code:
In {{org/apache/hadoop/ipc/Server.java}}
{noformat}
protected Server(...) {
//readThreads gets value from ipc.server.read.threadpool.size
this.readThreads = conf.getInt(
CommonConfigurationKeys.IPC_SERVER_RPC_READ_THREADS_KEY,
CommonConfigurationKeys.IPC_SERVER_RPC_READ_THREADS_DEFAULT);
} Listener(int port) throws IOException {
...
readers = new Reader[readThreads]; // <<--- OOM happens
here when readThreads is too large.
for (int i = 0; i < readThreads; i++) {
...
}
}
{noformat}
{{}}
h2. StackTrace:
{noformat}
java.lang.OutOfMemoryError: Java heap space
at org.apache.hadoop.ipc.Server$Listener.<init>(Server.java:1240)
at org.apache.hadoop.ipc.Server.<init>(Server.java:3127)
at org.apache.hadoop.ipc.RPC$Server.<init>(RPC.java:1062)
at
org.apache.hadoop.ipc.ProtobufRpcEngine2$Server.<init>(ProtobufRpcEngine2.java:468)
at
org.apache.hadoop.ipc.ProtobufRpcEngine2.getServer(ProtobufRpcEngine2.java:371)
at org.apache.hadoop.ipc.RPC$Builder.build(RPC.java:853)
at
org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.<init>(NameNodeRpcServer.java:466)
at
org.apache.hadoop.hdfs.server.namenode.NameNode.createRpcServer(NameNode.java:865)
at
org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:771)
at
org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:1020)
at
org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:995)
at
org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1769){noformat}
Reproduce:(1) Set ipc.server.read.threadpool.size to a large value, e.g.,
1535931645 (2) Run a simple test that exercises this parameter, e.g.
org.apache.hadoop.hdfs.server.namenode.metrics.TestNameNodeMetrics#testExcessBlocksFor
an easy reproduction, run the reproduce.sh in the attachment.
{{}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]