import java.io.*;
/**
* linux 下cpu 内存 磁盘 jvm的使用监控
* @author avery_leo
*
*/
public class TT {
/**
* 获取cpu使用情况
* @return
* @throws Exception
*/
public double getCpuUsage() throws Exception {
double cpuUsed = 0;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("top -b -n 1");// 调用系统的“top"命令
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
while ((str = in.readLine()) != null) {
int m = 0;
if (str.indexOf(" R ") != -1) {// 只分析正在运行的进程,top进程本身除外 &&
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 9) {// 第9列为CPU的使用百分比(RedHat
cpuUsed += Double.parseDouble(tmp);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
}
return cpuUsed;
}
/**
* 内存监控
* @return
* @throws Exception
*/
public double getMemUsage() throws Exception {
double menUsed = 0;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("top -b -n 1");// 调用系统的“top"命令
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
while ((str = in.readLine()) != null) {
int m = 0;
if (str.indexOf(" R ") != -1) {// 只分析正在运行的进程,top进程本身除外 &&
//
// System.out.println("------------------3-----------------");
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
if (++m == 10) {
// 9)--第10列为mem的使用百分比(RedHat 9)
menUsed += Double.parseDouble(tmp);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
}
return menUsed;
}
/**
* 获取磁盘空间大小
*
* @return
* @throws Exception
*/
public double getDeskUsage() throws Exception {
double totalHD = 0;
double usedHD = 0;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("df -hl");//df -hl 查看硬盘空间
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str = null;
String[] strArray = null;
int flag = 0;
while ((str = in.readLine()) != null) {
int m = 0;
// if (flag > 0) {
// flag++;
strArray = str.split(" ");
for (String tmp : strArray) {
if (tmp.trim().length() == 0)
continue;
++m;
// System.out.println("----tmp----" + tmp);
if (tmp.indexOf("G") != -1) {
if (m == 2) {
// System.out.println("---G----" + tmp);
if (!tmp.equals("") && !tmp.equals("0"))
totalHD += Double.parseDouble(tmp
.substring(0, tmp.length() - 1)) * 1024;
}
if (m == 3) {
// System.out.println("---G----" + tmp);
if (!tmp.equals("none") && !tmp.equals("0"))
usedHD += Double.parseDouble(tmp.substring(
0, tmp.length() - 1)) * 1024;
}
}
if (tmp.indexOf("M") != -1) {
if (m == 2) {
// System.out.println("---M---" + tmp);
if (!tmp.equals("") && !tmp.equals("0"))
totalHD += Double.parseDouble(tmp
.substring(0, tmp.length() - 1));
}
if (m == 3) {
// System.out.println("---M---" + tmp);
if (!tmp.equals("none") && !tmp.equals("0"))
usedHD += Double.parseDouble(tmp.substring(
0, tmp.length() - 1));
// System.out.println("----3----" + usedHD);
}
}
}
// }
}
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
}
return (usedHD / totalHD) * 100;
}
public static void main(String[] args) throws Exception {
TT cpu = new TT();
System.out.println("---------------cpu used:" + cpu.getCpuUsage() + "%");
System.out.println("---------------mem used:" + cpu.getMemUsage() + "%");
System.out.println("---------------HD used:" + cpu.getDeskUsage() + "%");
System.out.println("------------jvm监控----------------------");
Runtime lRuntime = Runtime.getRuntime();
System.out.println("--------------Free Momery:" + lRuntime.freeMemory()+"K");
System.out.println("--------------Max Momery:" + lRuntime.maxMemory()+"K");
System.out.println("--------------Total Momery:" + lRuntime.totalMemory()+"K");
System.out.println("---------------Available Processors :"
+ lRuntime.availableProcessors());
}
}
分享到:
相关推荐
这个“java监控开发示例”旨在提供一种方法来实现这一目标,通过Java代码远程监控系统资源,如CPU使用率、内存占用、磁盘空间以及网络状态等。 首先,我们需要理解Java中用于系统监控的基础概念和技术。Java提供了...
gcc -shared -o libnativeLib.so -I/usr/lib/jvm/java-8-openjdk-amd64/include -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux nativeLib.c ``` 3. **创建Java头文件**: 使用`javah`工具生成JNI头文件,...
在IT行业中,JVM(Java Virtual Machine)调优和Linux系统操作是两个至关重要的技能,尤其是在处理大型企业级应用时。对于Java开发者来说,理解JVM的工作原理并能进行有效的调优,可以显著提升应用程序的性能和稳定...
- **操作系统监控工具**:例如`vmstat`、`iostat`等,这些工具可以提供关于CPU使用率、内存使用情况、磁盘I/O等方面的统计数据。 - **JVM监控工具**:如`VisualGC`、`-verbose:gc`等,这些工具专门针对JVM的垃圾回收...
下面将从硬件信息、中间件、监控Linux服务器、监控和诊断JVM、其它命令五个方面总结常用的性能测试命令。 一、硬件信息 在性能测试中,对硬件信息的了解是非常重要的。下面是一些常用的命令: * 查看 Redhat 版本...
在Java应用环境中,nmon可以帮助我们监控JVM(Java Virtual Machine)的性能,如CPU占用、内存使用、磁盘I/O负载等。通过监控这些指标,我们可以及时发现并解决问题,确保Java应用的稳定运行。 三、nmon部署步骤 1....
例如,IS_JVM_ALERT用于设置是否在Full GC频率过高时发送警告,IS_MONITOR_SYSTEM设置是否监控系统级别的CPU和内存,MIN_MEM用于设定内存警报阈值等。 监控脚本的核心部分可能包含以下步骤: 1. 定义获取进程性能...
嵌入式Linux Java虚拟机的设计需考虑到资源有限的环境,比如内存、处理器速度和磁盘空间。常见的嵌入式Java虚拟机有KVM(Kaffe Virtual Machine)、IcedTea-Embedded和Dalvik等,它们针对嵌入式平台进行了优化。 ...
然而,在实际运行过程中,Java应用可能会导致Linux服务器出现各种性能问题,如CPU使用率异常升高、内存泄漏等。这些问题不仅会影响应用程序的正常运行,严重时还可能导致整个系统的崩溃。因此,掌握有效的性能问题...
在JVM(Java Virtual Machine)中,崩溃可能由于多种原因,如内存溢出、线程死锁、非法指令或系统资源耗尽等。Sigar库通过提供对系统资源的精细监控,可以帮助开发者诊断这些问题。例如,它能够监测JVM的内存使用...
同时,合理设计和使用并发数据结构、避免不必要的同步和锁竞争,以及监控系统资源使用情况(如CPU、内存和磁盘I/O)也是关键步骤。 此外,使用性能分析工具(如VisualVM、JProfiler或YourKit)可以帮助识别热点代码...
系统和JVM调优是Java开发人员在面试中经常遇到的话题,这关乎程序性能优化、内存管理和稳定性。本文将深入探讨这两个关键领域的核心概念,并提供一些实战策略。 首先,我们来了解一下系统调优。系统调优主要包括...
以下是一些常用的Linux系统监控命令,它们可以帮助我们追踪CPU使用、内存消耗、网络活动以及存储I/O等关键性能指标。 1. **`ps` 命令**: `ps -mp pid -o THREAD,tid,time` 或 `ps -Lfp pid` 用于找出占用CPU最多...
- **JVM监控**:对于Java应用,可以使用JMX或JConsole获取JVM内存、线程和GC状态。 Python和Shell结合使用可以实现更复杂的监控需求,如自定义警告阈值、数据可视化和长期的日志分析。Python的灵活性和丰富的库使其...
这些命令可以帮助开发者监控进程状态、CPU和内存状态、磁盘状态(IO、使用率)、网络流量状态以及块设备状态等。 - **JVM工具集**:主要用来监控和诊断JVM的状态,例如`jconsole`、`jvisualvm`、`MAT`(Memory ...
下面将详细介绍如何利用开源工具和编程手段来监控Linux服务器。 首先,我们需要了解Linux系统的一些基本监控指标: 1. **CPU使用率**:通过`top`或`mpstat`命令,可以查看各个CPU核心的使用情况,包括用户进程、...
JProfiler是一款广泛使用的Java剖析工具,它提供了丰富的功能,包括内存分析、CPU性能剖析、线程监控、SQL查询分析等。该工具以直观的用户界面和详尽的数据报告,帮助开发者快速定位和解决性能瓶颈,提升应用程序...
- 监控JVM的非堆内存使用情况。 - 分析方法区中的信息泄露。 3. **Perm内存泄漏精确定位**: - 通过`jmap -histo`命令获取方法区的内存使用情况。 - 使用`MAT`等工具分析。 4. **真实环境下内存泄漏的定位**:...
6. **网络I/O和磁盘I/O监控**:分析应用程序的输入输出性能,找出可能的瓶颈。 7. **远程连接**:JProfiler支持远程连接到运行中的Java应用程序,无需在目标机器上安装JProfiler。 四、使用JProfiler 14进行性能...