/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.artemis.core.server.impl; import java.lang.management.ManagementFactory; import java.lang.management.ThreadMXBean; import java.util.Date; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.core.paging.PagingManager; import org.apache.activemq.artemis.core.paging.PagingStore; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.utils.SizeFormatterUtil; public class ServerInfo { private final ActiveMQServer server; private final PagingManager pagingManager; public ServerInfo(final ActiveMQServer server, final PagingManager pagingManager) { this.server = server; this.pagingManager = pagingManager; } // Public -------------------------------------------------------- public String dump() { long maxMemory = Runtime.getRuntime().maxMemory(); long totalMemory = Runtime.getRuntime().totalMemory(); long freeMemory = Runtime.getRuntime().freeMemory(); long availableMemory = freeMemory + maxMemory - totalMemory; double availableMemoryPercent = 100.0 * availableMemory / maxMemory; ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); StringBuilder info = new StringBuilder("\n**** Server Dump ****\n"); info.append(String.format("date: %s%n", new Date())); info.append(String.format("free memory: %s%n", SizeFormatterUtil.sizeof(freeMemory))); info.append(String.format("max memory: %s%n", SizeFormatterUtil.sizeof(maxMemory))); info.append(String.format("total memory: %s%n", SizeFormatterUtil.sizeof(totalMemory))); info.append(String.format("available memory: %.2f%%%n", availableMemoryPercent)); info.append(appendPagingInfos()); info.append(String.format("# of thread: %d%n", threadMXBean.getThreadCount())); info.append(String.format("# of conns: %d%n", server.getConnectionCount())); info.append("********************\n"); return info.toString(); } private String appendPagingInfos() { StringBuilder info = new StringBuilder(); for (SimpleString storeName : pagingManager.getStoreNames()) { PagingStore pageStore; try { pageStore = pagingManager.getPageStore(storeName); info.append(String.format("\t%s: %s%n", storeName, SizeFormatterUtil.sizeof(pageStore.getPageSizeBytes() * pageStore.getNumberOfPages()))); } catch (Exception e) { info.append(String.format("\t%s: %s%n", storeName, e.getMessage())); } } return info.toString(); } }