`
lengchaotian
  • 浏览: 278649 次
  • 性别: 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;
    }

 

分享到:
评论

相关推荐

    服务器运维管理手册.doc

    HP服务器上面指示灯一般为UID,内部和外部健康灯 ,其他就是电源网口灯了,DELL的机种有的上面有风扇,内存,CPU,指示灯情况 ,图标都是很直观的,其它服务器与IBM,HP的差不多。 图示说明 详细描述: 2) 系统日志...

    【7A文】服务器性能计算.docx

    GGG业务检索服务器性能计算 GGG业务检索服务器使用Solr搜索引擎为GGGGG系统提供索引存储和检索的服务,一般情况下档案查询量要远大于浏览和下载电子文件数量,因此压力相对较大。 Solr搜索引擎是一个高性能,采用...

    JAVA基于局域网的聊天室系统(源代码+论文).zip

    (A)预览(Preview)模式:该模式使用CPU资源,视频帧先从捕获硬件传到系统内存,接着采用GDI函数在捕获窗中显示。在物理上,这种模式需要通过VGA卡在监视器上显示。 (B)叠加(Overlay)模式:该模式使用硬件叠加...

    java版商城源码下载-spring-cloud:春云

    java版商城源码下载 推荐服务器配置 服务器配置: CPU:2核 内存:8G 实例规格:标准型S2机型 带宽:2M 购买说明:如果业务量较大,推荐双机部署。 MySQL高可用版配置: CPU:1核 内存:2G 硬盘:200G 注意 Entity里...

    WGCLOUD基于微服务springboot架构开发,是轻量高性能的分布式监控系统

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

    java缴费源码-platform-plus:一个前后端分离的Java快速开发平台,基于SpringBoot2.X、Mybatis-Plus3

    platform-plus是一个轻量级的,前后端分离的Java快速开发平台 JavaDoc: 前端地址: 使用案例 完整案例登记列表,请查看,欢迎登记更多的案例。 以下为部分案例: 江西省教育缴费云平台: 内务管理系统: 优势 严格...

    ThinkJava. The Professional Java IDE:比IntelliJ好。 轻的。 专业的。-开源

    如果您使用的是其他操作系统,请使用Windows模拟器要求操作系统:Windows 7 SP1或更高版本的CPU:Intel Celeron或更强大的RAM:1 GB硬盘:超过3 MB的磁盘空间所需扩展:.NET Framework 4.1和Java SE开发套件(JDK)...

    WGCLOUD设计思想为新一代极简运维监控系统,提倡快速部署,降低运维学习难度,全自动化运行,无模板和脚本

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

    Oracle数据库管理员技术指南

    8.3.1 在内存中进行全部或大部分排序 8.3.2 最小化排序时的空间管理开销 8.3.3 使用多个 TEMP 表空间分布排序 8.4 优化数据存储的技术 8.4.1 使行链接和行迁移最小化 8.4.2 检测行链接/迁移 8.4.3 确定模式中...

    网站设计方案(完整版).doc

    3、数据库服务器 现有数据库配置如下: 型号:XXXX 内存:XXXX 硬盘:XXXX 盘 raid 1方式 Cpu:XXXX 每颗XXXX 4、weblogic XXX。 根据XXXX的要求,从高可用性和高靠性考虑,建议网站内、外网PC服务器均配置双机 或...

    印染厂生产仓储信息系统

    CPU频率在1.8GHZ/内存256M/硬盘20G以上的PC机,其中显示器建议可正常上1024×768分辨率。 (二) 软件平台  1)软件平台 服务器操作系统:WINDOWS XP/ WINDOWS 2000 Server 数据库系统:sqlserver 2005 JAVA平台:...

    计算机应用基础知识点总结.doc

    主机、显示器、键盘、鼠标、外部设备 16、主机的组成部分 CPU INTER和AMD 内存 内存储器和外存储器〔ROM和RAM的区别 主板 支持硬件正常运行的平台 硬盘 笔记本硬盘、台式机硬盘、服务器硬盘。转速、硬盘的三个接口:...

    RED HAT LINUX 6大全

    本书内容翔实、涉及领域广泛,并且提供了详细的例子和大量的参考资料(包括书籍、电子文档和Internet站点),是一本学习、使用和管理Linux不可多得的好书。 目 录 译者序 前言 第一部分 Red Hat Linux的介绍与安装 ...

    ORACLE9i_优化设计与系统调整

    §9.2.2 数据库服务器硬盘空间的估计 97 §9.2.3 应用服务器的考虑 98 §9.2.4 网络带宽的考虑 98 §9.4 数据库逻辑设计 98 §9.4.1 系统表空间 98 §9.4.2 数据表空间和索引空间分开 99 §9.4.3 回滚段设置 99 §...

    计算机应用基础第一章测试题含答案.doc

    恶意脚本:使用VB、Java等高级脚本语言编写,通过网页进行传播的病毒修改IE首页, 修改注册表,强行弹出广告。 U盘病毒:病毒首先向U盘写入病毒程序,更改.inf文件,将此文件指向病毒程序,打开 U盘windows就会运行...

    Hadoop实战中文版.PDF

    马如悦告诉IT168编辑:“百度使用的服务器品牌较多,市面上主流的服务器品牌均有涉及,但绝大多数都基于英特尔X86平台,配置则大体上是8核CPU(主要是英特尔至强7400/7500系列),32GB内存,12TB硬盘。此外我们也在...

    易语言程序免安装版下载

    修改应用接口支持库,增强“取快捷方式目标”命令功能,可以获取目标、参数、启始位置、图标、运行方式、快捷键、备注等信息。 9. 修改扩展界面支持库三,解决高级选择夹会导致所在窗口的收不到“首次激活”事件的...

    香槟网络系统 G H O S T XP SP3 7.0

    电源判断更准确,支持恢复系统到各种台式机、笔记本电脑、工作站、以及服务器。智能判断,自动卸载多余设备驱动。 ★系统特色: *系统安全补丁更新至2011年05月26日。 *更改IE浏览器为IE6 *更改为悦耳的开关机声音 *...

Global site tag (gtag.js) - Google Analytics