Arthas 应用诊断利器学习及使用(六) 系统命令dashboard

1,068 阅读2分钟

这是我参与更文挑战的第4天,活动详情查看: 更文挑战

本文内容基于arthas 3.5.1 版本,介绍系统命令dashboard的使用及实现。

一.dashboard命令

当前系统的实时数据面板,按 ctrl+c 退出。

当运行在Ali-tomcat时,会显示当前tomcat的实时信息,如HTTP请求的qps, rt, 错误数, 线程池信息等等。

参数名称参数缩写参数说明必填项示例
--number-of-execution-n刷新实时数据的次数可选dashboard -n 2
--interval-i刷新实时数据的时间间隔 (ms),默认5000ms可选dashboard -i 2000

image.png

首先会通过Timer启动一个定时任务,按照固定时间间隔执行,默认为5000ms,当执行次数超过Integer.MAX_VALUE后,定时任务就会停止。结束之后触发事件,清除定时任务。

具体实现看DashboardTimerTask继承了TimerTask中的run方法。

image.png

1.获取线程信息

ThreadUtil.getThreads()获取所有线程Map,以线程Name-ID为key
Thread.currentThread().getThreadGroup()获取线程组。
root.activeCount()获取线程组中活动线程数
线程id:thread.getId()
线程名:thread.getName()
线程组名:ThreadGroup group = thread.getThreadGroup(); group.getName()
线程优先级:thread.getPriority()
线程状态:thread.getState()
线程是否终止:thread.isInterrupted()
是否为守护线程:thread.isDaemon()
时间:ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean() threadMXBean.getThreadCpuTime(thread.getId())/1000000 通过计算cpu时间来统计cpu使用百分比

2.获取内存信息

addMemoryInfo(dashboardModel)统计memory使用情况
List<MemoryPoolMXBean> memoryPoolMXBeans = ManagementFactory.getMemoryPoolMXBeans()得到内存具体情况

MemoryUsage heapMemoryUsage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()获取heap使用情况

memoryUsage.getUsed()已使用内存大小
memoryUsage.getCommitted()已提交给 java 虚拟机使用的内存量
memoryUsage.getMax() 使用最大值

Class bufferPoolMXBeanClass = Class.forName("java.lang.management.BufferPoolMXBean"); 获取bufferpool
mbean.getTotalCapacity()获取总容量

3.获取gc信息

addGcInfo(dashboardModel)获取gc信息
List<GarbageCollectorMXBean> garbageCollectorMxBeans = ManagementFactory.getGarbageCollectorMXBeans()获取gc信息列表
gcMXBean.getName() gc名
gcMXBean.getCollectionCount() 获取full gc次数
gcMXBean.getCollectionTime() 获取full gc 时间

4.获取运行环境

addRuntimeInfo(dashboardModel) 获取运行环境信息
System.getProperty("os.name") os.name 获取操作系统名
System.getProperty("os.version") os.version 获取操作系统版本
System.getProperty("java.version") java.version 获取jdk版本
System.getProperty("java.home") java.home 获取jdk路径
ManagementFactory.getOperatingSystemMXBean().getSystemLoadAverage() 系统负载
Runtime.getRuntime().availableProcessors() 获取运行进程数
ManagementFactory.getRuntimeMXBean().getUptime() / 1000 获取启动后运行时间,单位秒

5.获取ali-tomcat信息

addTomcatInfo(dashboardModel)获取ali-tomcat信息 若访问http://localhost:8006成功表示可以获取ali-tomcat信息。