`
chixianhuadeyu
  • 浏览: 67294 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 监控linux CPU 内存 磁盘 JVM:

阅读更多
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监控开发示例”旨在提供一种方法来实现这一目标,通过Java代码远程监控系统资源,如CPU使用率、内存占用、磁盘空间以及网络状态等。 首先,我们需要理解Java中用于系统监控的基础概念和技术。Java提供了...

    java(jni)获得CPU、内存使用率 绝对可用

    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头文件,...

    JVM调优和Linux常见面试题.zip

    在IT行业中,JVM(Java Virtual Machine)调优和Linux系统操作是两个至关重要的技能,尤其是在处理大型企业级应用时。对于Java开发者来说,理解JVM的工作原理并能进行有效的调优,可以显著提升应用程序的性能和稳定...

    java虚拟机性能监控

    - **操作系统监控工具**:例如`vmstat`、`iostat`等,这些工具可以提供关于CPU使用率、内存使用情况、磁盘I/O等方面的统计数据。 - **JVM监控工具**:如`VisualGC`、`-verbose:gc`等,这些工具专门针对JVM的垃圾回收...

    性能测试常用命令.doc

    下面将从硬件信息、中间件、监控Linux服务器、监控和诊断JVM、其它命令五个方面总结常用的性能测试命令。 一、硬件信息 在性能测试中,对硬件信息的了解是非常重要的。下面是一些常用的命令: * 查看 Redhat 版本...

    nmon java jre nmon部署监控与分析

    在Java应用环境中,nmon可以帮助我们监控JVM(Java Virtual Machine)的性能,如CPU占用、内存使用、磁盘I/O负载等。通过监控这些指标,我们可以及时发现并解决问题,确保Java应用的稳定运行。 三、nmon部署步骤 1....

    基于python的Linux系统指定进程性能监控

    例如,IS_JVM_ALERT用于设置是否在Full GC频率过高时发送警告,IS_MONITOR_SYSTEM设置是否监控系统级别的CPU和内存,MIN_MEM用于设定内存警报阈值等。 监控脚本的核心部分可能包含以下步骤: 1. 定义获取进程性能...

    嵌入式linux的Java虚拟机分析与设计

    嵌入式Linux Java虚拟机的设计需考虑到资源有限的环境,比如内存、处理器速度和磁盘空间。常见的嵌入式Java虚拟机有KVM(Kaffe Virtual Machine)、IcedTea-Embedded和Dalvik等,它们针对嵌入式平台进行了优化。 ...

    java引起的linux服务器性能问题查找

    然而,在实际运行过程中,Java应用可能会导致Linux服务器出现各种性能问题,如CPU使用率异常升高、内存泄漏等。这些问题不仅会影响应用程序的正常运行,严重时还可能导致整个系统的崩溃。因此,掌握有效的性能问题...

    sigar1.6.4,jvm崩溃修复版

    在JVM(Java Virtual Machine)中,崩溃可能由于多种原因,如内存溢出、线程死锁、非法指令或系统资源耗尽等。Sigar库通过提供对系统资源的精细监控,可以帮助开发者诊断这些问题。例如,它能够监测JVM的内存使用...

    如何提高Linux Java性能的分析

    同时,合理设计和使用并发数据结构、避免不必要的同步和锁竞争,以及监控系统资源使用情况(如CPU、内存和磁盘I/O)也是关键步骤。 此外,使用性能分析工具(如VisualVM、JProfiler或YourKit)可以帮助识别热点代码...

    系统和JVM调优(面试突击)

    系统和JVM调优是Java开发人员在面试中经常遇到的话题,这关乎程序性能优化、内存管理和稳定性。本文将深入探讨这两个关键领域的核心概念,并提供一些实战策略。 首先,我们来了解一下系统调优。系统调优主要包括...

    常用的linux系统监控命令整理.docx

    以下是一些常用的Linux系统监控命令,它们可以帮助我们追踪CPU使用、内存消耗、网络活动以及存储I/O等关键性能指标。 1. **`ps` 命令**: `ps -mp pid -o THREAD,tid,time` 或 `ps -Lfp pid` 用于找出占用CPU最多...

    python和shell监控linux服务器的详细代码

    - **JVM监控**:对于Java应用,可以使用JMX或JConsole获取JVM内存、线程和GC状态。 Python和Shell结合使用可以实现更复杂的监控需求,如自定义警告阈值、数据可视化和长期的日志分析。Python的灵活性和丰富的库使其...

    美团JVM问题定位和排错

    这些命令可以帮助开发者监控进程状态、CPU和内存状态、磁盘状态(IO、使用率)、网络流量状态以及块设备状态等。 - **JVM工具集**:主要用来监控和诊断JVM的状态,例如`jconsole`、`jvisualvm`、`MAT`(Memory ...

    linux-monitor:监控Linux服务器的状态

    下面将详细介绍如何利用开源工具和编程手段来监控Linux服务器。 首先,我们需要了解Linux系统的一些基本监控指标: 1. **CPU使用率**:通过`top`或`mpstat`命令,可以查看各个CPU核心的使用情况,包括用户进程、...

    jprofiler_linux_86_5_2_4.zip

    JProfiler是一款广泛使用的Java剖析工具,它提供了丰富的功能,包括内存分析、CPU性能剖析、线程监控、SQL查询分析等。该工具以直观的用户界面和详尽的数据报告,帮助开发者快速定位和解决性能瓶颈,提升应用程序...

    java问题定位技术

    - 监控JVM的非堆内存使用情况。 - 分析方法区中的信息泄露。 3. **Perm内存泄漏精确定位**: - 通过`jmap -histo`命令获取方法区的内存使用情况。 - 使用`MAT`等工具分析。 4. **真实环境下内存泄漏的定位**:...

    jprofiler14 Linux完整环境包

    6. **网络I/O和磁盘I/O监控**:分析应用程序的输入输出性能,找出可能的瓶颈。 7. **远程连接**:JProfiler支持远程连接到运行中的Java应用程序,无需在目标机器上安装JProfiler。 四、使用JProfiler 14进行性能...

Global site tag (gtag.js) - Google Analytics