记录一次HDFS RPC返回Response过程慢导致的性能问题
文章目录 前言 NameNode请求处理慢的场景 RPC返回response的Handler处理慢问题 HDFS RPC call异步response改造 前言 众所周知,在HDFS NameNode中,一直都有一个老生常谈的难题就是其扩展性的问题,而很多时候我们说HDFS的扩展性问题时我们很多时候都在谈的点在于里面全局锁的问题。一个很通常的场景是NameNode在高并发请求处理下存在着激烈的锁竞争,进而使得用户感觉到他们的请求被处理的有点慢。不过本文笔者不聊关于全局锁优化的问题,最近笔者遇到了另外一种NameNode性能慢的场景,这个事情是发生在锁外的,发生的场景也比较有意思,于是借此机会简单聊聊。 NameNode请求处理慢的场景 我们先来探讨几个能够引发NameNode请求处理慢的场景? NameNode处于严重Full GC阶段 NameNode锁竞争激烈 NameNode内部用于处理用户请求的Handler持续处于繁忙状态 上述3点是笔者能够快速联想到的场景,除去第一点是JVM层面的优化后,后面两点其实不太好优化,后面两点很多时候是和集群所面临的请求吞吐量有关联。有人可能会说了,上面第三点关于Handler繁忙的状态,我们不可用简单调大NameNode Handler count数量不就可用解决了嘛。调大Handler表面上能够增大throughput