`
xiangkun
  • 浏览: 102065 次
  • 性别: Icon_minigender_1
  • 来自: 马尔代夫
社区版块
存档分类
最新评论

Java 关于操作系统

阅读更多
package com.bumt.police.test; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.LineNumberReader; 
import java.util.StringTokenizer; 

import sun.management.ManagementFactory; 

import com.sun.management.OperatingSystemMXBean; 


public class MonitorServiceImpl implements IMonitorService{ 

private static final int CPUTIME = 30;    
  
    private static final int PERCENT = 100;    
  
    private static final int FAULTLENGTH = 10;    
      
    private static final File versionFile = new File("/proc/version");    
    private static String linuxVersion = null;    
  
    /**   
     * 获得当前的监控对象.   
     * @return 返回构造好的监控对象   
     * @throws Exception   
     * @author GuoHuang   
     */    
    public MonitorInfoBean getMonitorInfoBean() throws Exception {    
        int kb = 1024;    
          
        // 可使用内存    
        long totalMemory = Runtime.getRuntime().totalMemory() / kb;    
        // 剩余内存    
        long freeMemory = Runtime.getRuntime().freeMemory() / kb;    
        // 最大可使用内存    
        long maxMemory = Runtime.getRuntime().maxMemory() / kb;    
  
        OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory    
                .getOperatingSystemMXBean();    
  
        // 操作系统    
        String osName = System.getProperty("os.name");    
        // 总的物理内存    
        long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb;    
        // 剩余的物理内存    
        long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb;    
        // 已使用的物理内存    
        long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb    
                .getFreePhysicalMemorySize())    
                / kb;    
  
        // 获得线程总数    
        ThreadGroup parentThread;    
        for (parentThread = Thread.currentThread().getThreadGroup(); parentThread    
                .getParent() != null; parentThread = parentThread.getParent())    
            ;    
        int totalThread = parentThread.activeCount();    
  
        double cpuRatio = 0;    
        if (osName.toLowerCase().startsWith("windows")) {    
            cpuRatio = this.getCpuRatioForWindows();    
        }    
        else {    
         cpuRatio = this.getCpuRateForLinux();    
        }    
          
        // 构造返回对象    
        MonitorInfoBean infoBean = new MonitorInfoBean();    
        infoBean.setFreeMemory(freeMemory);    
        infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);    
        infoBean.setMaxMemory(maxMemory);    
        infoBean.setOsName(osName);    
        infoBean.setTotalMemory(totalMemory);    
        infoBean.setTotalMemorySize(totalMemorySize);    
        infoBean.setTotalThread(totalThread);    
        infoBean.setUsedMemory(usedMemory);    
        infoBean.setCpuRatio(cpuRatio);    
        return infoBean;    
    }    
    private static double getCpuRateForLinux(){    
        InputStream is = null;    
        InputStreamReader isr = null;    
        BufferedReader brStat = null;    
        StringTokenizer tokenStat = null;    
        try{    
            System.out.println("Get usage rate of CUP , linux version: "+linuxVersion);    
  
            Process process = Runtime.getRuntime().exec("top -b -n 1");    
            is = process.getInputStream();                      
            isr = new InputStreamReader(is);    
            brStat = new BufferedReader(isr);    
              
            if(linuxVersion.equals("2.4")){    
                brStat.readLine();    
                brStat.readLine();    
                brStat.readLine();    
                brStat.readLine();    
                  
                tokenStat = new StringTokenizer(brStat.readLine());    
                tokenStat.nextToken();    
                tokenStat.nextToken();    
                String user = tokenStat.nextToken();    
                tokenStat.nextToken();    
                String system = tokenStat.nextToken();    
                tokenStat.nextToken();    
                String nice = tokenStat.nextToken();    
                  
                System.out.println(user+" , "+system+" , "+nice);    
                  
                user = user.substring(0,user.indexOf("%"));    
                system = system.substring(0,system.indexOf("%"));    
                nice = nice.substring(0,nice.indexOf("%"));    
                  
                float userUsage = new Float(user).floatValue();    
                float systemUsage = new Float(system).floatValue();    
                float niceUsage = new Float(nice).floatValue();    
                  
                return (userUsage+systemUsage+niceUsage)/100;    
            }else{    
                brStat.readLine();    
                brStat.readLine();    
                      
                tokenStat = new StringTokenizer(brStat.readLine());    
                tokenStat.nextToken();    
                tokenStat.nextToken();    
                tokenStat.nextToken();    
                tokenStat.nextToken();    
                tokenStat.nextToken();    
                tokenStat.nextToken();    
                tokenStat.nextToken();    
                String cpuUsage = tokenStat.nextToken();    
                      
                  
                System.out.println("CPU idle : "+cpuUsage);    
                Float usage = new Float(cpuUsage.substring(0,cpuUsage.indexOf("%")));    
                  
                return (1-usage.floatValue()/100);    
            }    
  
               
        } catch(IOException ioe){    
            System.out.println(ioe.getMessage());    
            freeResource(is, isr, brStat);    
            return 1;    
        } finally{    
            freeResource(is, isr, brStat);    
        }    
  
    }    
    private static void freeResource(InputStream is, InputStreamReader isr, BufferedReader br){    
        try{    
            if(is!=null)    
                is.close();    
            if(isr!=null)    
                isr.close();    
            if(br!=null)    
                br.close();    
        }catch(IOException ioe){    
            System.out.println(ioe.getMessage());    
        }    
    }    
  
  
    /**   
     * 获得CPU使用率.   
     * @return 返回cpu使用率   
     * @author GuoHuang   
     */    
    private double 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 Double.valueOf(    
                        PERCENT * (busytime) / (busytime + idletime))    
                        .doubleValue();    
            } else {    
                return 0.0;    
            }    
        } catch (Exception ex) {    
            ex.printStackTrace();    
            return 0.0;    
        }    
    }    
  
    /**        

* 读取CPU信息.   
     * @param proc   
     * @return   
     * @author GuoHuang   
     */    
    private 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 = Bytes.substring(line, capidx, cmdidx - 1)    
                        .trim();    
                String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim();    
                if (cmd.indexOf("wmic.exe") >= 0) {    
                    continue;    
                }    
                // log.info("line="+line);    
                if (caption.equals("System Idle Process")    
                        || caption.equals("System")) {    
                    idletime += Long.valueOf(    
                            Bytes.substring(line, kmtidx, rocidx - 1).trim())    
                            .longValue();    
                    idletime += Long.valueOf(    
                            Bytes.substring(line, umtidx, wocidx - 1).trim())    
                            .longValue();    
                    continue;    
                }    
  
                kneltime += Long.valueOf(    
                        Bytes.substring(line, kmtidx, rocidx - 1).trim())    
                        .longValue();    
                usertime += Long.valueOf(    
                        Bytes.substring(line, umtidx, wocidx - 1).trim())    
                        .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;    
    }    

    
public static void main(String[] args) throws Exception{ 
IMonitorService service = new MonitorServiceImpl();    
        MonitorInfoBean monitorInfo = service.getMonitorInfoBean();    
        System.out.println("cpu占有率=" + monitorInfo.getCpuRatio());    
          
        System.out.println("可使用内存=" + monitorInfo.getTotalMemory());    
        System.out.println("剩余内存=" + monitorInfo.getFreeMemory());    
        System.out.println("最大可使用内存=" + monitorInfo.getMaxMemory());    
          
        System.out.println("操作系统=" + monitorInfo.getOsName());    
        System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "kb");    
        System.out.println("剩余的物理内存=" + monitorInfo.getFreeMemory() + "kb");    
        System.out.println("已使用的物理内存=" + monitorInfo.getUsedMemory() + "kb");    
        System.out.println("线程总数=" + monitorInfo.getTotalThread() + "kb");    

}   

} 

class Bytes {    
    public 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;    
    }    
} 

class MonitorInfoBean {    
    /** 可使用内存. */    
    private long totalMemory;    
      
    /**  剩余内存. */    
    private long freeMemory;    
      
    /** 最大可使用内存. */    
    private long maxMemory;    
      
    /** 操作系统. */    
    private String osName;    
      
    /** 总的物理内存. */    
    private long totalMemorySize;    
      
    /** 剩余的物理内存. */    
    private long freePhysicalMemorySize;    
      
    /** 已使用的物理内存. */    
    private long usedMemory;    
      
    /** 线程总数. */    
    private int totalThread;    
      
    /** cpu使用率. */    
    private double cpuRatio;    
  
    public long getFreeMemory() {    
        return freeMemory;    
    }    
  
    public void setFreeMemory(long freeMemory) {    
        this.freeMemory = freeMemory;    
    }    
  
    public long getFreePhysicalMemorySize() {    
        return freePhysicalMemorySize;    
    }    
  
    public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {    
        this.freePhysicalMemorySize = freePhysicalMemorySize;    
    }    
  
    public long getMaxMemory() {    
        return maxMemory;    
    }    
  
    public void setMaxMemory(long maxMemory) {    
        this.maxMemory = maxMemory;    
    }    
  
    public String getOsName() {    
        return osName;    
    }    
  
    public void setOsName(String osName) {    
        this.osName = osName;    
    }    
  
    public long getTotalMemory() {    
        return totalMemory;    
    }    
  
    public void setTotalMemory(long totalMemory) {    
        this.totalMemory = totalMemory;    
    }    
  
    public long getTotalMemorySize() {    
        return totalMemorySize;    
    }    
  
    public void setTotalMemorySize(long totalMemorySize) {    
        this.totalMemorySize = totalMemorySize;    
    }    
  
    public int getTotalThread() {    
        return totalThread;    
    }    
  
    public void setTotalThread(int totalThread) {    
        this.totalThread = totalThread;    
    }    
  
    public long getUsedMemory() {    
        return usedMemory;    
    }    
  
    public void setUsedMemory(long usedMemory) {    
        this.usedMemory = usedMemory;    
    }    
  
    public double getCpuRatio() {    
        return cpuRatio;    
    }    
  
    public void setCpuRatio(double cpuRatio) {    
        this.cpuRatio = cpuRatio;    
    }    
}    


interface IMonitorService {    
    public MonitorInfoBean getMonitorInfoBean() throws Exception;    
  
}    

 

分享到:
评论

相关推荐

    关于java获取操作系统信息

    在Java编程语言中,获取操作系统的信息对于环境配置、程序调试及兼容性测试等方面具有重要意义。本文将基于给定的文件信息,深入探讨如何利用Java来获取操作系统的关键信息,并对每一条命令及其返回值进行详细解释。...

    java编写的操作系统

    在Java操作系统中,这可以通过实现线程调度算法来完成,比如轮转调度(Round Robin)、优先级调度(Priority Scheduling)或者最新的实时调度策略。时间片的大小和调度策略的选择会影响系统的响应时间和公平性。 ...

    java语言操作系统课程设计模拟进程管理系统源码.zip

    java语言操作系统课程设计模拟进程管理系统源码 需求分析 实现n个进程并发运行; 实现进程创建、撤销、阻塞、唤醒; 实现进程的同步; 实现优先级调度、时间片轮转、短进程优先等调度算法; 系统在运行过程中应能...

    基于Java的高级操作系统

    《基于Java的高级操作系统》是一本深入探讨操作系统理论与实践的专著,它结合了Java编程语言的独特视角,为读者提供了构建和理解操作系统的核心概念和技术的全面指导。这本书旨在帮助开发者和学生掌握如何利用Java...

    Java计算机操作系统实验

    实验二要求学生模拟作业调度的实现,用高级语言编写和调试多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。 实验三通过编写和调试存储管理的模拟程序以加深对存储管理方案的...

    java实现重启操作系统

    标签“Java restart OS”表明这是关于Java与操作系统交互的话题,这涵盖了操作系统接口、系统命令执行、权限管理等多个方面。在实际开发中,除了重启之外,可能还会遇到其他系统级别的需求,如监控系统状态、管理...

    java模拟的操作系统

    在Java编程语言中,模拟操作系统是一项复杂而有趣的任务,它涉及到计算机系统的核心概念,如资源管理、并发控制和调度策略。下面将详细讨论这个“java模拟的操作系统”项目中的主要知识点。 1. **磁盘管理**: ...

    java模拟操作系统

    用java模拟操作系统的基功能 处理机管理,内存管理,文件管理,图像化界面

    纯java编写的操作系统

    纯java编写的操作系统,很好的。功能基本实现了操作系统功能,并且代码设计的很美观。

    用java编的适用于操作系统课程设计的线程-进程管理

    本项目利用Java实现了线程和进程的模拟及管理,旨在帮助学生深入理解操作系统的工作原理。 线程是程序执行的最小单元,它共享同一进程中的资源,如内存空间。Java通过`java.lang.Thread`类提供了线程创建和管理的...

    Java模拟操作系统(内存管理,进程管理,文件管理,进程通信)

    Java模拟操作系统是一个基于Java编程语言实现的微型操作系统模型,它主要涵盖了四个核心领域:内存管理、进程管理、文件管理和进程通信。这样的项目旨在帮助开发者理解操作系统的工作原理,并提供了一个实践平台来...

    移动操作系统原理与实践——基于Java语言的Android应用开发.zip

    移动操作系统原理与实践——基于Java语言的Android应用开发 目录 基础篇 第1章移动操作系统概论 1.1操作系统的原理与概念 1.1.1隐藏硬件细节 1.1.2资源管理 1.1.3操作系统的历史 1.2操作系统的分类 1.2.1...

    caozuoxitong123.rar_Java操作系统_java 操作系统_操作系统

    在给定的压缩包"caozuoxitong123.rar"中,我们看到一个以Java语言实现的操作系统仿真实验项目。这个项目显然旨在帮助开发者或学习者理解操作系统的基本概念和工作原理,尽管它还没有完全完成,但仍然可以作为一个有...

    操作系统实验及其代码(Java编写)

    操作系统是计算机科学的基础,它是控制和管理计算机硬件与软件资源的核心程序。...通过实践,你将能够更熟练地运用Java来实现复杂的操作系统概念,这对未来从事系统级开发或者性能优化的工作大有裨益。

    基于Java的操作系统进程调度器与内存管理源码+实验论文(操作系统课程实验).zip

    基于Java的操作系统进程调度器与内存管理源码+实验论文(操作系统课程实验).zip基于Java的操作系统进程调度器与内存管理源码+实验论文(操作系统课程实验).zip基于Java的操作系统进程调度器与内存管理源码+实验论文...

    JAVA获取操作系统名称

    java获取操作系统名称,通过 System.getProperty("os.name") 由于JDK的bug,Windows Server 2012 R2获取到的System.getProperty("os.name") 为 Window NT unknown 因此需要通过JNA(Java Native Access )调用...

    java 获取操作系统信息

    java 获取操作系统信息

    操作系统课程设计JAVA

    本学期操作系统课程设计。 内存管理和进程调度

    java写的模拟操作系统磁盘管理系统程序

    用java写的操作系统的磁盘管理程序,有详细的源代码和代码注释,如有错漏,欢迎指正…………

    适用于所有操作系统的 Java

    Java 可以玩网络游戏、与世界各地的人们聊天、欣赏三维图片等等。此外,对于作为公司计算基础的企业内部网应用程序和其他电子商务解决方案而言,它也是不可缺少的一部分。

Global site tag (gtag.js) - Google Analytics