abdullah alamoudi has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/1941
Change subject: Print Http Server direct memory usage ...................................................................... Print Http Server direct memory usage Change-Id: I4a324f10db52e77c7e69ca4246b9d84b4479f25d --- M hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java M hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java M hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/servlet/ChattyServlet.java M hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/test/HttpServerTest.java 4 files changed, 69 insertions(+), 4 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/41/1941/1 diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java index ca20f4a..e190bfa 100644 --- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java +++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServer.java @@ -34,6 +34,7 @@ import org.apache.hyracks.http.api.IServlet; import io.netty.bootstrap.ServerBootstrap; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.Channel; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; @@ -83,6 +84,8 @@ executor = new ThreadPoolExecutor(numExecutorThreads, numExecutorThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(requestQueueSize), runnable -> new Thread(runnable, "HttpExecutor(port:" + port + ")-" + threadId.getAndIncrement())); + long directMemoryBudget = numExecutorThreads * (long) HIGH_WRITE_BUFFER_WATER_MARK; + LOGGER.log(Level.INFO, "The direct memory budget for this server is " + directMemoryBudget + " bytes"); } public final void start() throws Exception { // NOSONAR @@ -194,6 +197,7 @@ Collections.sort(servlets, (l1, l2) -> l2.getPaths()[0].length() - l1.getPaths()[0].length()); ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) + .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT) .childOption(ChannelOption.WRITE_BUFFER_WATER_MARK, WRITE_BUFFER_WATER_MARK) .handler(new LoggingHandler(LogLevel.DEBUG)).childHandler(new HttpServerInitializer(this)); channel = b.bind(port).sync().channel(); @@ -255,7 +259,7 @@ } protected HttpServerHandler createHttpHandler(int chunkSize) { - return new HttpServerHandler<>(this, chunkSize); + return new HttpServerHandler(this, chunkSize); } public ExecutorService getExecutor() { diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java index e89ed56..28f04e6 100644 --- a/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java +++ b/hyracks-fullstack/hyracks/hyracks-http/src/main/java/org/apache/hyracks/http/server/HttpServerHandler.java @@ -35,14 +35,14 @@ import io.netty.handler.codec.http.HttpResponseStatus; import io.netty.handler.codec.http.HttpVersion; -public class HttpServerHandler<T extends HttpServer> extends SimpleChannelInboundHandler<Object> { +public class HttpServerHandler extends SimpleChannelInboundHandler<Object> { private static final Logger LOGGER = Logger.getLogger(HttpServerHandler.class.getName()); - protected final T server; + protected final HttpServer server; protected final int chunkSize; protected HttpRequestHandler handler; - public HttpServerHandler(T server, int chunkSize) { + public HttpServerHandler(HttpServer server, int chunkSize) { this.server = server; this.chunkSize = chunkSize; } diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/servlet/ChattyServlet.java b/hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/servlet/ChattyServlet.java index 30df003..fb362a4 100644 --- a/hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/servlet/ChattyServlet.java +++ b/hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/servlet/ChattyServlet.java @@ -18,7 +18,13 @@ */ package org.apache.hyracks.http.servlet; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryPoolMXBean; +import java.lang.management.MemoryType; +import java.lang.reflect.Field; +import java.util.List; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; @@ -27,10 +33,13 @@ import org.apache.hyracks.http.server.AbstractServlet; import org.apache.hyracks.http.server.utils.HttpUtil; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.handler.codec.http.HttpResponseStatus; +import io.netty.util.internal.PlatformDependent; public class ChattyServlet extends AbstractServlet { private static final Logger LOGGER = Logger.getLogger(ChattyServlet.class.getName()); + private static long MAX = 0L; private byte[] bytes; public ChattyServlet(ConcurrentMap<String, Object> ctx, String[] paths) { @@ -52,5 +61,56 @@ for (int i = 0; i < 100; i++) { response.outputStream().write(bytes); } + printMemUsage(); + } + + @SuppressWarnings("restriction") + public synchronized static void printMemUsage() { + StringBuilder report = new StringBuilder(); + report.append("sun.misc.VM.maxDirectMemory: "); + report.append(sun.misc.VM.maxDirectMemory()); + report.append('\n'); + report.append("sun.misc.SharedSecrets.getJavaNioAccess().getDirectBufferPool().getMemoryUsed(): "); + report.append(sun.misc.SharedSecrets.getJavaNioAccess().getDirectBufferPool().getMemoryUsed()); + report.append('\n'); + report.append("sun.misc.SharedSecrets.getJavaNioAccess().getDirectBufferPool().getTotalCapacity(): "); + report.append(sun.misc.SharedSecrets.getJavaNioAccess().getDirectBufferPool().getTotalCapacity()); + report.append('\n'); + report.append("ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage(): "); + report.append(ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()); + report.append('\n'); + report.append("---------------------------- Beans ----------------------------"); + report.append('\n'); + List<MemoryPoolMXBean> memPoolBeans = ManagementFactory.getMemoryPoolMXBeans(); + for (MemoryPoolMXBean bean : memPoolBeans) { + if (bean.isValid() && bean.getType() == MemoryType.NON_HEAP) { + report.append(bean.getName()); + report.append(": "); + report.append(bean.getUsage()); + report.append('\n'); + } + } + report.append("---------------------------- Netty ----------------------------"); + report.append('\n'); + try { + Field field = PlatformDependent.class.getDeclaredField("DIRECT_MEMORY_COUNTER"); + field.setAccessible(true); + AtomicLong usedDirectMemory = (AtomicLong) field.get(null); + long used = usedDirectMemory.get(); + report.append("Current PlatformDependent.DIRECT_MEMORY_COUNTER: "); + report.append(used); + report.append('\n'); + report.append("Maximum PlatformDependent.DIRECT_MEMORY_COUNTER: "); + MAX = Math.max(MAX, used); + report.append(MAX); + report.append('\n'); + report.append('\n'); + } catch (Throwable th) { + th.printStackTrace(); + return; + } + report.append("--------------- PooledByteBufAllocator.DEFAULT ----------------"); + report.append(PooledByteBufAllocator.DEFAULT.dumpStats()); + System.err.println(report.toString()); } } \ No newline at end of file diff --git a/hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/test/HttpServerTest.java b/hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/test/HttpServerTest.java index 854980e..6512dc1 100644 --- a/hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/test/HttpServerTest.java +++ b/hyracks-fullstack/hyracks/hyracks-http/src/test/java/org/apache/hyracks/http/test/HttpServerTest.java @@ -94,6 +94,7 @@ @Test public void testChattyServer() throws Exception { + ChattyServlet.printMemUsage(); int numRequests = 64; int numExecutors = 32; int serverQueueSize = 32; -- To view, visit https://asterix-gerrit.ics.uci.edu/1941 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4a324f10db52e77c7e69ca4246b9d84b4479f25d Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: abdullah alamoudi <bamou...@gmail.com>