|
|
@@ -0,0 +1,90 @@
|
|
|
+package cn.reghao.autodop.common.stat.app;
|
|
|
+
|
|
|
+import cn.reghao.autodop.common.utils.DateTimeUtil;
|
|
|
+
|
|
|
+import java.lang.management.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * JVM 状态
|
|
|
+ *
|
|
|
+ * @author reghao
|
|
|
+ * @date 2020-09-10 18:31:16
|
|
|
+ */
|
|
|
+public class JvmStat {
|
|
|
+ private final RuntimeMXBean rtBean;
|
|
|
+ private final ClassLoadingMXBean classLoadingBean;
|
|
|
+ private final ThreadMXBean threadBean;
|
|
|
+ private final MemoryMXBean memoryBean;
|
|
|
+ private final List<MemoryPoolMXBean> memoryPoolBeans;
|
|
|
+ private final List<BufferPoolMXBean> bufferPoolBeans;
|
|
|
+ private final List<GarbageCollectorMXBean> gcBeans;
|
|
|
+
|
|
|
+ public JvmStat() {
|
|
|
+ this.rtBean = ManagementFactory.getRuntimeMXBean();
|
|
|
+ this.classLoadingBean = ManagementFactory.getClassLoadingMXBean();
|
|
|
+ this.threadBean = ManagementFactory.getThreadMXBean();
|
|
|
+ this.memoryBean = ManagementFactory.getMemoryMXBean();
|
|
|
+ this.memoryPoolBeans = ManagementFactory.getMemoryPoolMXBeans();
|
|
|
+ this.bufferPoolBeans = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
|
|
|
+ this.gcBeans = ManagementFactory.getGarbageCollectorMXBeans();
|
|
|
+ }
|
|
|
+
|
|
|
+ public AppInfo info() {
|
|
|
+ AppInfo appInfo = new AppInfo();
|
|
|
+ // TODO pid 不一定准确
|
|
|
+ appInfo.setPid(Integer.parseInt(rtBean.getName().split("@")[0]));
|
|
|
+ appInfo.setStartTime(DateTimeUtil.msTimestampFormat(rtBean.getStartTime()));
|
|
|
+ return appInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ public JvmInfo jvmInfo() {
|
|
|
+ JvmInfo jvmInfo = new JvmInfo();
|
|
|
+ MemoryUsage heap = memoryBean.getHeapMemoryUsage();
|
|
|
+ jvmInfo.setJvmHeap(new MemoryInfo(heap));
|
|
|
+
|
|
|
+ MemoryUsage nonheap = memoryBean.getNonHeapMemoryUsage();
|
|
|
+ jvmInfo.setJvmNonheap(new MemoryInfo(nonheap));
|
|
|
+
|
|
|
+ jvmInfo.setJvmThreadsLive(threadBean.getThreadCount());
|
|
|
+ jvmInfo.setJvmThreadsDaemon(threadBean.getDaemonThreadCount());
|
|
|
+ jvmInfo.setJvmThreadsPeak(threadBean.getPeakThreadCount());
|
|
|
+
|
|
|
+ jvmInfo.setJvmClassesLoaded(classLoadingBean.getLoadedClassCount());
|
|
|
+ jvmInfo.setJvmClassesUnloaded(classLoadingBean.getUnloadedClassCount());
|
|
|
+ classLoadingBean.getTotalLoadedClassCount();
|
|
|
+
|
|
|
+ return jvmInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<BufferPoolInfo> bufferPoolInfo() {
|
|
|
+ List<BufferPoolInfo> list = new ArrayList<>();
|
|
|
+ bufferPoolBeans.forEach(bufferPoolBean -> list.add(new BufferPoolInfo(bufferPoolBean)));
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<MemoryPoolInfo> memoryPoolInfo() {
|
|
|
+ List<MemoryPoolInfo> list = new ArrayList<>();
|
|
|
+ memoryPoolBeans.forEach(memoryPoolBean -> list.add(new MemoryPoolInfo(memoryPoolBean)));
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<GarbageCollectorInfo> gcInfo() {
|
|
|
+ List<GarbageCollectorInfo> list = new ArrayList<>();
|
|
|
+ gcBeans.forEach(gcBean -> list.add(new GarbageCollectorInfo(gcBean)));
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void threadInfo() {
|
|
|
+ ThreadInfo[] threadInfos = threadBean.getThreadInfo(threadBean.getAllThreadIds());
|
|
|
+ for (ThreadInfo threadInfo : threadInfos) {
|
|
|
+ String name = threadInfo.getThreadName();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ JvmStat status = new JvmStat();
|
|
|
+ status.threadInfo();
|
|
|
+ }
|
|
|
+}
|