- 浏览: 365167 次
- 性别:
- 来自: 阿里巴巴
文章分类
- 全部博客 (207)
- Maven (5)
- Cassandra (2)
- Hadoop (3)
- LDAP (2)
- SOA (7)
- 认证、加密、安全 (6)
- 搜索引擎相关技术 (3)
- REST (7)
- 数据库 (11)
- Java 基础相关 (38)
- UML (1)
- Java NIO 框架 (3)
- javassist (1)
- Bean容器 (4)
- 网络编程 (1)
- NoSQL (4)
- XML、Json (1)
- JS (2)
- Google (6)
- Warp-MVC (2)
- 持久层 (2)
- sitebricks (1)
- MVC (6)
- CSS (2)
- JPA (2)
- RDBMS (5)
- cache (4)
- tomcat (1)
- 其它 (3)
- eclipse (1)
- bigpipe (1)
- RDBMS MySQL (1)
- MySQL (2)
- ant (1)
- 前端 (2)
- Groovy (1)
- linux (3)
- Scala (1)
- zookeeper (1)
- redis (2)
- 测试 (1)
- 监控 (1)
- mac (3)
- 区块链 (3)
- 工具 (1)
最新评论
-
masuweng:
好好好,辛苦了!!
Spring Data JPA 简单介绍 -
masuweng:
Spring Data JPA 简单介绍 -
zhangjianxinjava:
您好,大神本人小白一个最近在研究不知道可否 通过邮箱进行交流, ...
JAVA Metrics度量工具 - Metrics Core -
xzs603:
http://zhengdl126.iteye.com/blo ...
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器 -
JavaStart:
运行mysql2redis 的install.sh 文件为何提 ...
mysql到redis的复制
http://blog.csdn.net/zgmzyr/article/details/6903500
http://topmanopensource.iteye.com/blog/833386
在我们想监控我们的JVM状态的时候,除了可以通过JMX这类jvm提供的接口服务,还是可以自己通过程序来编写一些接口来获取服务器状态信息。
以下代码我在jdk1.5.10版本上测试通过。
- <SPAN style="FONT-SIZE: 18px">import java.lang.management.CompilationMXBean;
- import java.lang.management.GarbageCollectorMXBean;
- import java.lang.management.MemoryMXBean;
- import java.lang.management.MemoryPoolMXBean;
- import java.lang.management.RuntimeMXBean;
- import java.lang.management.ThreadMXBean;
- import java.util.List;
- import sun.management.ManagementFactory;
- import com.sun.management.OperatingSystemMXBean;
- /**
- * java获取所在操作系统的信息,JVM的相关信息
- * @author kongqz
- * */
- public class MyJvm {
- /**
- * @param 直接通过jdk来获取系统相关状态,在1.5.0_10-b03版本以上测试通过
- */
- public static void main(String[] args) {
- System.out.println("=======================通过java来获取相关系统状态============================ ");
- int i = (int)Runtime.getRuntime().totalMemory()/1024;//Java 虚拟机中的内存总量,以字节为单位
- System.out.println("总的内存量 i is "+i);
- int j = (int)Runtime.getRuntime().freeMemory()/1024;//Java 虚拟机中的空闲内存量
- System.out.println("空闲内存量 j is "+j);
- System.out.println("最大内存量 is "+Runtime.getRuntime().maxMemory()/1024);
- System.out.println("=======================OperatingSystemMXBean============================ ");
- OperatingSystemMXBean osm = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
- System.out.println(osm.getFreeSwapSpaceSize()/1024);
- System.out.println(osm.getFreePhysicalMemorySize()/1024);
- System.out.println(osm.getTotalPhysicalMemorySize()/1024);
- //获取操作系统相关信息
- System.out.println("osm.getArch() "+osm.getArch());
- System.out.println("osm.getAvailableProcessors() "+osm.getAvailableProcessors());
- System.out.println("osm.getCommittedVirtualMemorySize() "+osm.getCommittedVirtualMemorySize());
- System.out.println("osm.getName() "+osm.getName());
- System.out.println("osm.getProcessCpuTime() "+osm.getProcessCpuTime());
- System.out.println("osm.getVersion() "+osm.getVersion());
- //获取整个虚拟机内存使用情况
- System.out.println("=======================MemoryMXBean============================ ");
- MemoryMXBean mm=(MemoryMXBean)ManagementFactory.getMemoryMXBean();
- System.out.println("getHeapMemoryUsage "+mm.getHeapMemoryUsage());
- System.out.println("getNonHeapMemoryUsage "+mm.getNonHeapMemoryUsage());
- //获取各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况
- System.out.println("=======================ThreadMXBean============================ ");
- ThreadMXBean tm=(ThreadMXBean)ManagementFactory.getThreadMXBean();
- System.out.println("getThreadCount "+tm.getThreadCount());
- System.out.println("getPeakThreadCount "+tm.getPeakThreadCount());
- System.out.println("getCurrentThreadCpuTime "+tm.getCurrentThreadCpuTime());
- System.out.println("getDaemonThreadCount "+tm.getDaemonThreadCount());
- System.out.println("getCurrentThreadUserTime "+tm.getCurrentThreadUserTime());
- //当前编译器情况
- System.out.println("=======================CompilationMXBean============================ ");
- CompilationMXBean gm=(CompilationMXBean)ManagementFactory.getCompilationMXBean();
- System.out.println("getName "+gm.getName());
- System.out.println("getTotalCompilationTime "+gm.getTotalCompilationTime());
- //获取多个内存池的使用情况
- System.out.println("=======================MemoryPoolMXBean============================ ");
- List<MemoryPoolMXBean> mpmList=ManagementFactory.getMemoryPoolMXBeans();
- for(MemoryPoolMXBean mpm:mpmList){
- System.out.println("getUsage "+mpm.getUsage());
- System.out.println("getMemoryManagerNames "+mpm.getMemoryManagerNames().toString());
- }
- //获取GC的次数以及花费时间之类的信息
- System.out.println("=======================MemoryPoolMXBean============================ ");
- List<GarbageCollectorMXBean> gcmList=ManagementFactory.getGarbageCollectorMXBeans();
- for(GarbageCollectorMXBean gcm:gcmList){
- System.out.println("getName "+gcm.getName());
- System.out.println("getMemoryPoolNames "+gcm.getMemoryPoolNames());
- }
- //获取运行时信息
- System.out.println("=======================RuntimeMXBean============================ ");
- RuntimeMXBean rmb=(RuntimeMXBean)ManagementFactory.getRuntimeMXBean();
- System.out.println("getClassPath "+rmb.getClassPath());
- System.out.println("getLibraryPath "+rmb.getLibraryPath());
- System.out.println("getVmVersion "+rmb.getVmVersion());
- }
- }</SPAN>
1、获取jdk信息
- <SPAN style="FONT-SIZE: 18px">System.out.println(System.getProperty("java.version"));
- System.out.println(System.getProperty("java.vendor"));
- System.out.println(System.getProperty("java.vendor.url"));
- System.out.println(System.getProperty("java.home"));
- System.out.println(System.getProperty("java.vm.specification.version"));
- System.out.println(System.getProperty("java.vm.specification.vendor"));
- System.out.println(System.getProperty("java.vm.specification.name"));
- System.out.println(System.getProperty("java.vm.version"));
- System.out.println(System.getProperty("java.vm.vendor"));
- System.out.println(System.getProperty("java.vm.name"));
- System.out.println(System.getProperty("java.specification.version"));
- System.out.println(System.getProperty("java.specification.vendor"));
- System.out.println(System.getProperty("java.specification.name"));
- System.out.println(System.getProperty("java.class.version"));
- System.out.println(System.getProperty("java.class.path"));
- System.out.println(System.getProperty("java.library.path"));
- System.out.println(System.getProperty("java.io.tmpdir"));
- System.out.println(System.getProperty("java.compiler"));
- System.out.println(System.getProperty("java.ext.dirs")); </SPAN>
2、获取系统信息
- <SPAN style="FONT-SIZE: 18px">System.out.println(System.getProperty("os.name"));
- System.out.println(System.getProperty("os.arch"));
- System.out.println(System.getProperty("os.version"));
- System.out.println(System.getProperty("file.separator"));
- System.out.println(System.getProperty("path.separator"));
- System.out.println(System.getProperty("line.separator"));
- System.out.println(System.getProperty("user.name"));
- System.out.println(System.getProperty("user.home"));
- System.out.println(System.getProperty("user.dir")); </SPAN>
检测虚拟机当前的状态总是 Java 开放人员所关心的,也正是因为如此,出现了大量的 profiler 工具来检测当前的虚拟机状态。从 Java SE 5 之后,在 JDK 中,我们有了一些 Java 的虚拟机检测 API,即 java.lang.management
包。Management 包里面包括了许多 MXBean 的接口类和 LockInfo、MemoryUsage、MonitorInfo 和 ThreadInfo 等类。从名字可以看出,该包提供了虚拟机内存分配、垃圾收集(GC)情况、操作系统层、线程调度和共享锁,甚至编译情况的检测机制。这样一来,Java 的开发人员就可以很简单地为自己做一些轻量级的系统检测,来确定当前程序的各种状态,以便随时调整。
要获得这些信息,我们首先通过 java.lang.management.ManagementFactory
这个工厂类来获得一系列的 MXBean。包括:
-
ClassLoadingMXBean
ClassLoadMXBean 包括一些类的装载信息,比如有多少类已经装载 / 卸载(unloaded),虚拟机类装载的 verbose 选项(即命令行中的 Java – verbose:class 选项)是否打开,还可以帮助用户打开 / 关闭该选项。
-
CompilationMXBean
CompilationMXBean 帮助用户了解当前的编译器和编译情况,该 mxbean 提供的信息不多。
-
GarbageCollectorMXBean
相对于开放人员对 GC 的关注程度来说,该 mxbean 提供的信息十分有限,仅仅提供了 GC 的次数和 GC 花费总时间的近似值。但是这个包中还提供了三个的内存管理检测类:MemoryManagerMXBean,MemoryMXBean 和 MemoryPoolMXBean。
-
MemoryManagerMXBean
这个类相对简单,提供了内存管理类和内存池(memory pool)的名字信息。
-
MemoryMXBean
这个类提供了整个虚拟机中内存的使用情况,包括 Java 堆(heap)和非 Java 堆所占用的内存,提供当前等待 finalize 的对象数量,它甚至可以做 gc(实际上是调用 System.gc)。
-
MemoryPoolMXBean
该信息提供了大量的信息。在 JVM 中,可能有几个内存池,因此有对应的内存池信息,因此,在工厂类中,getMemoryPoolMXBean() 得到是一个 MemoryPoolMXBean 的 list。每一个 MemoryPoolMXBean 都包含了该内存池的详细信息,如是否可用、当前已使用内存 / 最大使用内存值、以及设置最大内存值等等。
-
MemoryManagerMXBean
-
OperatingSystemMXBean
该类提供的是操作系统的简单信息,如构架名称、当前 CPU 数、最近系统负载等。
-
RuntimeMXBean
运行时信息包括当前虚拟机的名称、提供商、版本号,以及 classpath、bootclasspath 和系统参数等等。
-
ThreadMXBean
在 Java 这个多线程的系统中,对线程的监控是相当重要的。ThreadMXBean 就是起到这个作用。ThreadMXBean 可以提供的信息包括各个线程的各种状态,CPU 占用情况,以及整个系统中的线程状况。从 ThreadMXBean 可以得到某一个线程的 ThreadInfo 对象。这个对象中则包含了这个线程的所有信息。
我们知道,management 和底层虚拟机的关系是非常紧密的。其实,有一些的是直接依靠虚拟机提供的公开 API 实现的,比如 JVMTI;而另外一些则不然,很大一块都是由虚拟机底层提供某些不公开的 API / Native Code 提供的。这样的设计方式,保证了 management 包可以提供足够的信息,并且使这些信息的提供又有足够的效率;也使 management 包和底层的联系非常紧密。
- package com.easyway.space.commons.systems;
- import java.lang.management.ClassLoadingMXBean;
- import java.lang.management.CompilationMXBean;
- import java.lang.management.GarbageCollectorMXBean;
- import java.lang.management.LockInfo;
- import java.lang.management.ManagementFactory;
- import java.lang.management.MemoryMXBean;
- import java.lang.management.MemoryManagerMXBean;
- import java.lang.management.MemoryPoolMXBean;
- import java.lang.management.MemoryType;
- import java.lang.management.MemoryUsage;
- import java.lang.management.MonitorInfo;
- import java.lang.management.OperatingSystemMXBean;
- import java.lang.management.RuntimeMXBean;
- import java.lang.management.ThreadInfo;
- import java.lang.management.ThreadMXBean;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import java.util.Map.Entry;
- /**
- * 系统监控工具
- * management 和底层虚拟机的关系是非常紧密的。其实,有一些的是直接依靠虚拟机提供的公
- * 开 API 实现的,比如 JVMTI;而另外一些则不然,很大一块都是由虚拟机底层提供某些不公开
- * 的 API / Native Code 提供的。这样的设计方式,保证了 management 包可以提供足够的信
- * 息,并且使这些信息的提供又有足够的效率;也使 management 包和底层的联系非常紧密。
- * @author longgangbai
- *
- */
- public class SystemUtils {
- /**
- *ClassLoadingMXBean ClassLoadMXBean 包括一些类的装载信息,
- * 比如有多少类已经装载 / 卸载(unloaded),
- * 虚拟机类装载的 verbose 选项(即命令行中的 Java – verbose:class 选项)是否打开,
- * 还可以帮助用户打开 / 关闭该选项。
- */
- public static void getVMClassInformation(){
- ClassLoadingMXBean classLoadMXBean=ManagementFactory.getClassLoadingMXBean();
- int loadClazzCount=classLoadMXBean.getLoadedClassCount();
- System.out.println("加载类的数量:"+loadClazzCount);
- long hasloadClazzCount=classLoadMXBean.getTotalLoadedClassCount();
- System.out.println("已经加载类的数量:"+hasloadClazzCount);
- long hasUnloadClazzCount=classLoadMXBean.getUnloadedClassCount();
- System.out.println("尚未加载类的数量:"+hasUnloadClazzCount);
- boolean isVerbose=classLoadMXBean.isVerbose();
- System.out.println("是否开始加载类信息:"+isVerbose);
- //CompilationMXBean 帮助用户了解当前的编译器和编译情况,该 mxbean 提供的信息不多。
- CompilationMXBean compilationMXBean=ManagementFactory.getCompilationMXBean();
- String jitName=compilationMXBean.getName();
- System.out.println("即时编译的名称:"+jitName);
- long totalCompileTime=compilationMXBean.getTotalCompilationTime();
- System.out.println("总的编译时间:"+totalCompileTime+"/s");
- boolean isSupport=compilationMXBean.isCompilationTimeMonitoringSupported();
- if(isSupport){
- System.out.println("支持即时编译器编译监控");
- }else{
- System.out.println("不支持即时编译器编译监控");
- }
- List<GarbageCollectorMXBean> gcMXBeanList=ManagementFactory.getGarbageCollectorMXBeans();
- //相对于开放人员对 GC 的关注程度来说,该 mxbean 提供的信息十分有限,仅仅提供了 GC 的次数和 GC 花费总时间的近似值。
- for (GarbageCollectorMXBean gcMXBean : gcMXBeanList) {
- //内存池名称
- String[] poolNames=gcMXBean.getMemoryPoolNames();
- for (String poolName : poolNames) {
- System.out.println("poolNames="+poolName);
- }
- }
- //提供了内存管理类和内存池(memory pool)的名字信息。
- List<MemoryManagerMXBean> memoryMgrMXBeanList=ManagementFactory.getMemoryManagerMXBeans();
- //内存管理器的信息
- for (MemoryManagerMXBean memoryManagerMXBean : memoryMgrMXBeanList) {
- String[] poolNames=memoryManagerMXBean.getMemoryPoolNames();
- for (String poolName : poolNames) {
- System.out.println("poolNames="+poolName);
- }
- }
- //内存信息
- MemoryMXBean memoryMXBean=ManagementFactory.getMemoryMXBean();
- //java堆得使用情况信息
- MemoryUsage heapMemoryUsage=memoryMXBean.getHeapMemoryUsage();
- long usaged=heapMemoryUsage.getUsed();
- System.out.println("java 内存堆使用内存:"+usaged);
- long maxUsage=heapMemoryUsage.getMax();
- System.out.println("java 内存堆最大使用内存:"+maxUsage);
- long initUsage=heapMemoryUsage.getInit();
- System.out.println("java 内存堆初始化时占用内存:"+initUsage);
- List<MemoryPoolMXBean> memoryPoolMXBeanList=ManagementFactory.getMemoryPoolMXBeans();
- //该信息提供了大量的信息。在 JVM 中,可能有几个内存池,因此有对应的内存池信息,因此,在工厂类中
- //,getMemoryPoolMXBean() 得到是一个 MemoryPoolMXBean 的 list。每一个 MemoryPoolMXBean 都包含
- //了该内存池的详细信息,如是否可用、当前已使用内存 / 最大使用内存值、以及设置最大内存值等等。
- for (MemoryPoolMXBean memoryPoolMXBean : memoryPoolMXBeanList) {
- //内存池的名称
- String poolName=memoryPoolMXBean.getName();
- //内存管理器的名称
- String[] memoryMgrNames=memoryPoolMXBean.getMemoryManagerNames();
- for (String mgrName : memoryMgrNames) {
- System.out.println("内存管理器的名称:"+mgrName);
- }
- //java JVM最近内存的使用情况
- MemoryUsage memoryUsage=memoryPoolMXBean.getCollectionUsage();
- System.out.println("内存池的收集器内存使用率:"+memoryUsage.getUsed()/memoryUsage.getMax()+"%");
- memoryPoolMXBean.getCollectionUsageThreshold();
- memoryPoolMXBean.getCollectionUsageThresholdCount();
- MemoryType memoryType=memoryPoolMXBean.getType();
- System.out.println("内存的信息:"+memoryType.name());
- MemoryUsage memoryUage=memoryPoolMXBean.getUsage();
- System.out.println("内存池的内存使用率:"+memoryUage.getUsed()/memoryUage.getMax()+"%");
- memoryPoolMXBean.getUsageThreshold();
- System.out.println();
- memoryPoolMXBean.getUsageThresholdCount();
- System.out.println();
- }
- //该类提供的是操作系统的简单信息,如构架名称、当前 CPU 数、最近系统负载等。
- OperatingSystemMXBean operateSystemMBean=ManagementFactory.getOperatingSystemMXBean();
- String operateName=operateSystemMBean.getName();
- System.out.println("操作系统的名称:"+operateName);
- int processListCount=operateSystemMBean.getAvailableProcessors();
- System.out.println("操作系统的进程数:"+processListCount);
- String osArchName=operateSystemMBean.getArch();//System.getProperty("os.arch");
- System.out.println("操作系统的架构:"+osArchName);
- double loadAverage=operateSystemMBean.getSystemLoadAverage();
- System.out.println("操作系统的负载均衡信息:"+loadAverage);
- String versionName=operateSystemMBean.getVersion();//System.getProperty("os.version");
- System.out.println("操作系统的版本号码:"+versionName);
- //运行时信息包括当前虚拟机的名称、提供商、版本号,以及 classpath、bootclasspath 和系统参数等等。
- RuntimeMXBean runtimeMXBean=ManagementFactory.getRuntimeMXBean();
- String vmName=runtimeMXBean.getVmName();
- System.out.println("虚拟机的名称:"+vmName);
- String vmVersion=runtimeMXBean.getVmVersion();
- System.out.println("虚拟机的版本:"+vmVersion);
- Map<String, String> sysMaps=runtimeMXBean.getSystemProperties();
- Set<Entry<String,String>> keyLists=sysMaps.entrySet();
- for (Entry<String, String> entry : keyLists) {
- System.out.println(entry.getKey()+":"+entry.getValue());
- }
- String vmVendor=runtimeMXBean.getVmVendor();
- System.out.println("系统的供应商的名称:"+vmVendor);
- //类加载器的路径
- String clazzPath=runtimeMXBean.getClassPath();//System.getProperty("java.class.path")}
- System.out.println("操作系统的类加载器的名称:"+clazzPath);
- List<String> argsList=runtimeMXBean.getInputArguments();
- System.out.println("操作系统的参数信息");
- for (String args : argsList) {
- System.out.println(" "+args);
- }
- String libPath=runtimeMXBean.getLibraryPath();// System.getProperty("java.library.path")
- System.out.println("java 的类库路径:"+libPath );
- String specVersion=runtimeMXBean.getManagementSpecVersion();
- System.out.println("实施运行Java虚拟机管理接口规范 的版本"+specVersion);
- String specName=runtimeMXBean.getSpecName();
- System.out.println("规范的名称:"+specName);
- String specVender=runtimeMXBean.getSpecVendor();
- System.out.println("规范管理接口供应商 :"+specVender);
- long startTime=runtimeMXBean.getStartTime();
- System.out.println("java 虚拟机的开始启动的时间:"+startTime);
- runtimeMXBean.getSpecVersion();
- System.out.println("规范接口版本::"+operateName);
- String bottClassPath =runtimeMXBean.getBootClassPath();
- System.out.println("操作系统的bootstrap 的classloader:"+bottClassPath);
- //在 Java 这个多线程的系统中,对线程的监控是相当重要的。ThreadMXBean 就是起到这个作用。
- //ThreadMXBean 可以提供的信息包括各个线程的各种状态,CPU 占用情况,以及整个系统中的线
- //程状况。从 ThreadMXBean 可以得到某一个线程的 ThreadInfo 对象。这个对象中则包含了这个
- //线程的所有信息。
- //线程的信息
- ThreadMXBean threadMXBean=ManagementFactory.getThreadMXBean();
- //所有的线程的编号
- long[] threadIds=threadMXBean.getAllThreadIds();
- for (long threadId : threadIds) {
- //线程的信息
- ThreadInfo threadInfo=threadMXBean.getThreadInfo(threadId);
- //线程被阻塞的数量
- threadInfo.getBlockedCount();
- //被锁定线程的监控信息
- MonitorInfo[] monitorInfos=threadInfo.getLockedMonitors();
- for (MonitorInfo monitorInfo : monitorInfos) {
- int depth=monitorInfo.getLockedStackDepth();
- System.out.println("锁定的程度:"+depth);
- }
- //异步锁定的信息
- LockInfo[] lockinfos=threadInfo.getLockedSynchronizers();
- //锁定的信息
- for (LockInfo lockInfo : lockinfos) {
- System.out.println("锁定类的名称:"+lockInfo.getClassName());
- }
- //线程的名称
- String threadName=threadInfo.getThreadName();
- System.out.println("线程的名称:"+threadName);
- Thread.State state=threadInfo.getThreadState();
- System.out.println("线程的信息:"+state.name());
- }
- long cpuTime=threadMXBean.getCurrentThreadCpuTime();
- long curentTime=threadMXBean.getCurrentThreadUserTime();
- long threadCount=threadMXBean.getDaemonThreadCount();
- long peakliveThreadCount=threadMXBean.getPeakThreadCount();
- long threadCounts=threadMXBean.getThreadCount();
- System.out.println("当前处于live状态的线程总的数量:"+threadCounts);
- long totalThreadCount=threadMXBean.getTotalStartedThreadCount();
- System.out.println("JVM 启动之后,总的自动线程数量:"+totalThreadCount);
- }
- /**
- *
- * @return
- */
- public static final String getHeapMemoryUsage() {
- ClassLoadingMXBean mxbean;
- return ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
- .getUsed()
- + "/"
- + ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()
- .getMax();
- }
- /**
- * 当前使用内存的百分比
- * @return
- */
- public static final String getHeapMemoryUsagePercent() {
- return (((double) ManagementFactory.getMemoryMXBean()
- .getHeapMemoryUsage().getUsed() / (double) ManagementFactory
- .getMemoryMXBean().getHeapMemoryUsage().getMax()) * 100L)
- + "%";
- }
- /**
- * 当前非java堆占用的百分比
- * @return
- */
- public static final String getNonHeapMemoryUsage() {
- return ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
- .getUsed()
- + "/"
- + ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()
- .getMax();
- }
- /**
- *
- * @return
- */
- public static final String getNonHeapMemoryUsagePercent() {
- return (((double) ManagementFactory.getMemoryMXBean()
- .getNonHeapMemoryUsage().getUsed() / (double) ManagementFactory
- .getMemoryMXBean().getNonHeapMemoryUsage().getMax()) * 100)
- + "%";
- }
- /**
- * 获取线程数
- * @return
- */
- public static final String getThreadCount() {
- return "" + ManagementFactory.getThreadMXBean().getThreadCount();
- }
- }
发表评论
-
浮点数计算
2020-08-25 16:15 320@Test public void test2() ... -
AQS、ReentrantLock、CLH锁 、MCS锁 分析
2018-12-25 23:45 6751. ReentrantLock的介绍 Reentran ... -
Java并发编程:CountDownLatch、CyclicBarrier、Semaphore、Phaser
2015-02-26 16:41 1362在java 1.5中,提供了 ... -
技术网站资料
2014-07-17 11:53 0http://javakaiyuan.com ht ... -
Java之死-前言
2014-07-15 10:14 747用了好多年的java之后越来越感觉其并不像 ... -
Java中使用OpenSSL生成的RSA公私钥进行数据加解密
2012-10-25 11:34 4373openssl genrsa -out rsa_pr ... -
java开源
2012-05-29 14:34 1490开源不是开放编译器的源代码,而是写了一个软 ... -
用Ant打Jar包--在Manifest中引用Classpath
2012-03-15 13:20 1588用Ant打Jar包--在Manifest ... -
分布式锁服务器
2011-11-07 22:14 1945在分布式系统中如何 ... -
Java 7 Fork/Join 并行计算框架概览
2011-11-05 16:26 1070http://www.iteye.com/topic/ ... -
Apache Jakarta Commons 工具集简介
2011-11-03 11:22 1583org.apache.commons.collectio ... -
JDBC batch批处理Statement executeBatch 详解
2011-09-28 13:25 2741http://blog.csdn.net/basene ... -
代码动态生成利器ASM
2011-09-22 20:02 1051前言 代码生成器(code generato ... -
Fastjson技术内幕
2011-09-13 23:51 1339文章来源:http://code.alibabatech.co ... -
基于Spring可扩展Schema提供自定义配置支持
2011-08-07 16:01 1226在很多情况下,我们需要为系统提供可配置化支持,简单的做法可以直 ... -
Mule 与 Spring2.0's extensible XML configuration mechanism
2011-08-07 15:50 1356mule2.2.1已经采用从sprin ... -
alibaba fastjson(json序列化器)序列化部分源码解析
2011-08-03 21:11 2016本文copy自http://www.flydmeng.co ... -
JVM 远程调试 参数
2011-07-28 09:49 1883远程调试 参数 -server -Xdebug -Xnoag ... -
Sequential Lock in Java
2011-07-03 16:22 13971 Overview Linux内核中常见的同步机制 ... -
Hessian远程调用及序列化协议
2011-06-28 18:22 3012demo中客户端和服务端的hessian版本都是4.0.7,下 ...
相关推荐
本篇文档详细介绍了JVM调优工具的命令使用及其相关知识点,涵盖了内存信息分析、死锁检测、JMX远程监控等方面的命令行工具的使用方法。 首先,文档提到了JPS命令,它用于查看当前运行的Java进程信息,并返回进程ID...
这个项目的主要目标是演示如何利用Java编程语言在SpringBoot环境中获取服务器的相关信息。下面将详细阐述SpringBoot、Siger以及如何在Java中获取服务器信息。 SpringBoot是由Pivotal团队提供的全新框架,其设计目的...
内容:Java代码,获取服务器的基本信息(内存,cpu,存储状态等) 适用场景:服务器均可适用,主要是监测服务器的使用状态。 使用方法: 1.添加工程依赖 <!-- 获取系统信息 --> <groupId>...
#### 获取JVM命令配置信息的方法 在了解具体参数之前,首先需要知道如何查看可用的JVM参数及其说明。以下是在Windows平台上的示例步骤: 1. **打开CMD命令提示符**:点击开始菜单 -> 所有程序 -> Java -> Java SDK ...
SpringBoot结合Sigar获取服务器监控信息提供restful接口的源代码, 并使用swagger生成接口文档, 包括 CPU信息,服务器基本信息,内存信息, JVM信息,磁盘信息等. 有详细的代码注释.
本文将深入探讨如何利用RMI远程连接到Java虚拟机(JVM),并通过JMX获取JVM的相关参数。 RMI是Java提供的一种机制,允许在不同JVM之间透明地调用对象的方法,就像这些对象都在同一台机器上一样。RMI的核心组件包括...
1. **获取dump文件**:当JVM出现问题时,通过JVM的命令行选项(如`-XX:+HeapDumpOnOutOfMemoryError`)或者使用如`jmap`命令生成heap dump文件。 2. **安装HeadAnalyzer**:解压`ha414.jar`文件,这是一个包含...
尽管不同JVM打印的Thread Dump可能略有差异,但它们通常提供了当前所有活动线程的状态信息以及JVM中所有Java线程的堆栈跟踪详情。这些堆栈信息包括完整的类名、执行的方法以及可能的源代码行号。 **1.2 Thread Dump...
文档中的示例代码通过创建两个线程同时获取两个不同的锁,演示了如何制造一个死锁的场景。然后使用jstack加上进程id来查找死锁的线程。通过这种方式,我们可以识别出Java应用中的死锁问题。 在远程监控方面,JMX...
Java通过Java虚拟机(JVM)在不同的操作系统上运行,使得开发者可以使用相同的代码库来处理各种硬件信息。 在Windows环境下,Java可以通过Java Native Interface (JNI) 来调用本地API,如Kernel32.dll中的函数,...
要查看JVM中的线程信息,可以使用`ThreadMXBean`的静态工厂方法`ManagementFactory.getThreadMXBean()`获取实例,然后调用相关方法。以下是一个简单的示例代码(参考文件`ThreadAction.java`): ```java import ...
通过不同的参数,我们可以获取更多详细信息: - `-q`:只显示进程ID。 - `-v`:显示每个进程启动时传递给JVM的命令行参数。 - `-m`:显示传递给main方法的参数。 - `-l`:显示main类或jar的完全限定名称。 ...
首先,获取服务器的实际物理内存值至关重要。在Linux环境中,可以通过执行`cat /proc/meminfo | grep MemTotal`命令来获取,单位为KB。了解服务器的总内存有助于合理分配各个Java进程的资源。 其次,需要识别服务器...
JMX能够帮助我们获取JVM内存状态、CPU利用率、线程信息以及垃圾收集情况等关键指标。此外,它还支持动态调整日志级别,例如log4j可以通过JMX接口在线调整日志级别。 JMX不仅仅是一个规范,它同时提供了一个框架,...
**基于(siger)开发的SpringBoot项目,java获取服务器信息** 该项目为 Java探针 运行前提是 有Jvm环境,集成了Swagger接口 **场景:** 在没有使用 **分布式**的项目,进行集群管理时,有时候来了做服务器监控的...
总结来说,Hyperic Sigar是一个强大且灵活的系统监控工具,通过其Java API我们可以轻松获取服务器的各种状态信息,这对于管理和监控Java应用是非常有价值的。在实际项目中,结合日志分析、性能测试等手段,可以更好...
通过这些信息,我们可以监控内存使用情况,防止内存泄漏,并适时调整JVM的内存配置。 网络监控通常涉及网络接口的带宽使用、连接状态和错误统计。在Java中,`java.net`包提供了`Socket`和`ServerSocket`类用于创建...
其中`libname`为本地代理库文件名,如`hprof`,可用于获取JVM的运行情况,包括CPU、内存、线程等运行数据,并可以输出到指定文件中。`options`是传递给本地库的参数,多个参数间用逗号分隔。在不同的操作系统上,...
2. **通过网络下载**:从远程服务器获取.class文件。 3. **从压缩文件加载**:如从ZIP或JAR文件中加载。 4. **从特定数据库中提取**:针对某些应用场景,如从专用数据库中提取.class文件。 5. **动态编译**:在运行...