Details
Description
In our production environment, the standby NN often do fullgc, through mat we found the largest object is FileSystem$Cache, which contains 7,844,890 DistributedFileSystem.
By view hierarchy of method FileSystem.get() , I found only NamenodeWebHdfsMethods#get call FileSystem.get(). I don't know why creating different DistributedFileSystem every time instead of get a FileSystem from cache.
case GETHOMEDIRECTORY: { final String js = JsonUtil.toJsonString("Path", FileSystem.get(conf != null ? conf : new Configuration()) .getHomeDirectory().toUri().getPath()); return Response.ok(js).type(MediaType.APPLICATION_JSON).build(); }
When we close FileSystem when GETHOMEDIRECTORY, NN don't do fullgc.
case GETHOMEDIRECTORY: { FileSystem fs = null; try { fs = FileSystem.get(conf != null ? conf : new Configuration()); final String js = JsonUtil.toJsonString("Path", fs.getHomeDirectory().toUri().getPath()); return Response.ok(js).type(MediaType.APPLICATION_JSON).build(); } finally { if (fs != null) { fs.close(); } } }
Attachments
Attachments
Issue Links
- is broken by
-
HDFS-8542 WebHDFS getHomeDirectory behavior does not match specification
- Resolved