`
lengchaotian
  • 浏览: 281715 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java 获取服务器CPU、内存、硬盘使用量

    博客分类:
  • java
 
阅读更多

 

/**
 * <获取系统信息类>
 * <获取系统信息,如CPU、内存、硬盘使用情况>
 * @author  wenkaixuan
 * @version  [版本号, 2012-5-9]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class GetSystemInfo
{
    private static final int CPUTIME = 500;
    
    private static final int PERCENT = 100;
    
    private static final int FAULTLENGTH = 10;
    
    //获取内存使用率
    public static String getMemery()
    {
        OperatingSystemMXBean osmxb = (OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
        // 总的物理内存+虚拟内存
        long totalvirtualMemory = osmxb.getTotalSwapSpaceSize();
        // 剩余的物理内存
        long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize();
        Double compare = (Double)(1 - freePhysicalMemorySize * 1.0 / totalvirtualMemory) * 100;
        String str = "内存已使用:" + compare.intValue() + "%";
        return str;
    }
    
    //获取文件系统使用率
    public static List<String> getDisk()
    {
        // 操作系统
        List<String> list = new ArrayList<String>();
        for (char c = 'A'; c <= 'Z'; c++)
        {
            String dirName = c + ":/";
            File win = new File(dirName);
            if (win.exists())
            {
                long total = (long)win.getTotalSpace();
                long free = (long)win.getFreeSpace();
                Double compare = (Double)(1 - free * 1.0 / total) * 100;
                String str = c + ":盘  已使用 " + compare.intValue() + "%";
                list.add(str);
            }
        }
        return list;
    }
    
    //获得cpu使用率
    public static String getCpuRatioForWindows()
    {
        try
        {
            String procCmd =
                System.getenv("windir")
                    + "\\system32\\wbem\\wmic.exe process get Caption,CommandLine,KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
            // 取进程信息
            long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd));
            Thread.sleep(CPUTIME);
            long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd));
            if (c0 != null && c1 != null)
            {
                long idletime = c1[0] - c0[0];
                long busytime = c1[1] - c0[1];
                return "CPU使用率:" + Double.valueOf(PERCENT * (busytime) * 1.0 / (busytime + idletime)).intValue() + "%";
            }
            else
            {
                return "CPU使用率:" + 0 + "%";
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            return "CPU使用率:" + 0 + "%";
        }
    }
    
    //读取cpu相关信息
    private static long[] readCpu(final Process proc)
    {
        long[] retn = new long[2];
        try
        {
            proc.getOutputStream().close();
            InputStreamReader ir = new InputStreamReader(proc.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);
            String line = input.readLine();
            if (line == null || line.length() < FAULTLENGTH)
            {
                return null;
            }
            int capidx = line.indexOf("Caption");
            int cmdidx = line.indexOf("CommandLine");
            int rocidx = line.indexOf("ReadOperationCount");
            int umtidx = line.indexOf("UserModeTime");
            int kmtidx = line.indexOf("KernelModeTime");
            int wocidx = line.indexOf("WriteOperationCount");
            long idletime = 0;
            long kneltime = 0;
            long usertime = 0;
            while ((line = input.readLine()) != null)
            {
                if (line.length() < wocidx)
                {
                    continue;
                }
                // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount,
                // ThreadCount,UserModeTime,WriteOperation
                String caption = substring(line, capidx, cmdidx - 1).trim();
                String cmd = substring(line, cmdidx, kmtidx - 1).trim();
                if (cmd.indexOf("wmic.exe") >= 0)
                {
                    continue;
                }
                String s1 = substring(line, kmtidx, rocidx - 1).trim();
                String s2 = substring(line, umtidx, wocidx - 1).trim();
                if (caption.equals("System Idle Process") || caption.equals("System"))
                {
                    if (s1.length() > 0)
                        idletime += Long.valueOf(s1).longValue();
                    if (s2.length() > 0)
                        idletime += Long.valueOf(s2).longValue();
                    continue;
                }
                if (s1.length() > 0)
                    kneltime += Long.valueOf(s1).longValue();
                if (s2.length() > 0)
                    usertime += Long.valueOf(s2).longValue();
            }
            retn[0] = idletime;
            retn[1] = kneltime + usertime;
            return retn;
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
        finally
        {
            try
            {
                proc.getInputStream().close();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        return null;
    }
    
    /**
    * 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在 包含汉字的字符串时存在隐患,现调整如下:
    * @param src 要截取的字符串
    * @param start_idx 开始坐标(包括该坐标)
    * @param end_idx 截止坐标(包括该坐标)
    * @return
    */
    private static String substring(String src, int start_idx, int end_idx)
    {
        byte[] b = src.getBytes();
        String tgt = "";
        for (int i = start_idx; i <= end_idx; i++)
        {
            tgt += (char)b[i];
        }
        return tgt;
    }

 

分享到:
评论

相关推荐

    Java获取系统CPU、内存、硬盘等系统信息

    本文将详细探讨如何利用Java获取Windows和Linux系统的CPU、内存以及硬盘信息。 首先,让我们聚焦于CPU信息的获取。在Java中,`java.lang.management`包提供了ManagementFactory类,它包含了获取系统管理信息的方法...

    java使用siger 获取服务器硬件信息(CPU 内存 网络 io等)

    在Java编程中,获取服务器硬件信息是常见的需求,特别是在系统监控、性能分析或者资源管理的场景下。Siger(可能是“System Information Gatherer”的缩写)是一个可能的库,用于帮助开发者轻松地获取包括CPU、内存...

    ipmi 获取服务器硬件信息(温度,风扇转速,内存数,硬盘数等等)

    5. **硬盘信息**:获取硬盘数量和状态可能需要结合其他系统接口,如SMBUS或SMART数据,VxIPMI可能不直接提供这个功能,但可以与其他Java库结合使用,如JNA(Java Native Access)来访问这些信息。 6. **处理和展示...

    snmp.zip_SNMP_java snmp cpu_java获取cpu

    在这个"snmp.zip"压缩包中,主要关注的是如何使用Java来实现SNMP协议,以获取远程计算机的CPU使用率、内存信息和硬盘使用情况。 首先,让我们了解一下SNMP在Java中的实现。Java提供了SNMP支持的API,主要包含在`...

    MooInfo是OSHI 的一种可视化实现,用于查看有关系统和硬件的信息 如操作系统,进程,内存,CPU,磁盘,设备,传感器等

    OSHI是一个用Java编写的跨平台库,它允许开发者获取关于操作系统、处理器、内存、磁盘、网络设备以及各种传感器的详细信息。MooInfo作为其可视化界面,对于操作系统监控和硬件诊断具有很高的实用价值。 在操作系统...

    Java Process Manager

    在Java Process Manager的上下文中,开发人员会使用SDK中的函数和接口来获取和操作进程信息,如进程ID、内存使用情况、CPU占用率等。 Java Task Manager的核心功能可能包括: 1. **进程管理**:列出所有运行的Java...

    基于SpringBoot+Bootstrap实现linux自动化运维监控系统,完美实现了分布式监控

    基于微服务springboot架构开发,是轻量高性能的分布式监控系统,核心采集指标包括:**cpu使用率,cpu温度,内存使用率,磁盘容量,磁盘IO,硬盘SMART健康状态,系统负载,连接数量,网卡流量,硬件系统信息等。...

    服务器的选择

    即使是入门级配置,也建议使用单路至强CPU、4GB内存和Raid1。 其次,考虑服务器需要支持的用户访问量。评估注册用户数量、同时在线用户及访问峰值,这些数据将决定服务器的CPU性能和内存大小。与技术人员和业务部门...

    测试缓存和内存使用的小程序

    3. **内存监控**:通过内置的系统调用或者第三方库(如Python的`psutil`库),程序可以获取和记录内存使用情况,包括总内存、已用内存、空闲内存和交换内存等信息。 4. **性能指标**:可能包含计算和显示内存和缓存...

    系统内存优化 9大法

    除了内存之外,总线类型、CPU、硬盘和显存等部件的性能也会显著影响内存的使用效率。例如: - 如果显存太小,即使有大量内存也无法有效提高显示速度; - 硬盘速度慢会拖累整个系统的性能。 综上所述,通过对页面...

    SMBIOS 获取系统硬件信息

    1. **编程接口**:开发人员可以使用各种编程语言(如C、C++、Python、Java等)的库来访问SMBIOS数据。例如,Python有`py-smbios`库,C有`libsmbin`,这些库提供API调用来读取和解析SMBIOS表格。 2. **命令行工具**...

    System.zip

    【System.zip】是一个包含Java实现的系统监控Demo的压缩包,其主要目的是为了展示如何监控服务器的实时状态,包括但不限于硬盘使用情况、内存占用、JVM(Java虚拟机)的相关信息。这个Demo对于开发者来说非常有用,...

    mysql服务器端运行环境要求参照.pdf

    应用服务器推荐配置为64位Xeon 2GHz双CPU,8GB内存,使用SCSI或SAS硬盘,建议采用RAID5阵列,硬盘容量至少144GB,同样配备双千兆网卡。同样,可选择的品牌和型号包括IBM System x3650 M2、HP ProLiant DL380 G6、...

    服务器测试流程.docx

    - 使用SPEC2006评估处理器性能,SiSoft Sandra测试内存子系统,IOMeter测试存储子系统,WebBench、Netbench和Benchmark Factory测试网络应用性能,Cinebench测试服务器的多任务处理能力。 10. **测试过程记录**: ...

    sigar-1.6.5.132jar包

    SIGAR(System Information Gatherer and Reporter)是一个跨平台的工具,它允许开发者获取操作系统级别的信息,如CPU使用率、内存状态、硬盘使用情况以及网络流量等。这个库对于开发运维工具、自动化监控解决方案...

    Jemter服务器监控组件

    "服务器监控组件"主要属于监听器类别,它允许测试人员观察服务器在执行测试计划时的CPU使用率、内存消耗、网络I/O等关键指标,这些数据对于理解和诊断系统性能至关重要。 服务器监控组件通常包含以下几个部分: 1....

    服务器端运行环境要求[整理].pdf

    综上所述,构建服务器端运行环境时,需综合考虑硬件配置(包括CPU、内存、硬盘、网卡等)、软件配置(操作系统、数据库、中间件等)以及并发用户数量等因素。选择合适的配置不仅能保证系统的稳定运行,还能有效提升...

    wmi.zip_java wmi_wmi

    4. **处理数据**:根据业务需求,提取并处理所需的信息,如CPU型号、内存容量、硬盘信息等。 5. **安全与性能**:在使用WMI时,要注意权限控制和性能优化。过度频繁的查询可能会影响系统性能,因此合理规划查询频率...

    java基础篇第一章

    - 计算机由中央处理器(CPU)、内存、存储设备(如硬盘、软盘、CD、磁带)、输入设备(如键盘、鼠标)、输出设备(如显示器、打印机)、通信设备(如调制解调器、网络接口卡)以及总线组成。总线是连接这些组件传输...

    java分布式应用总结.pdf

    - **垂直伸缩**:通过升级硬件资源(CPU、内存、硬盘)提升单个节点的处理能力。 - **水平伸缩**:增加服务器实例,实现负载均衡,以处理更多并发请求和更大数据量,提升计算能力。 以上知识点构成了Java分布式...

Global site tag (gtag.js) - Google Analytics