当前位置:  技术问答>linux和unix

用JAVA取得LINUX系统的CPU使用率,关于LINUX版本问题(在线等)

    来源: 互联网  发布时间:2016-08-10

    本文导语:   /**       * 获得Linux CPU使用率.       * @return 返回cpu使用率       */     private double getCpuRateForLinux() {         InputStream is = null;         InputStreamReader isr = null;         BufferedReader brStat = null;  ...

 /** 
     * 获得Linux CPU使用率. 
     * @return 返回cpu使用率 
     */
    private double getCpuRateForLinux() {
        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader brStat = null;
        StringTokenizer tokenStat = null;
        try {
            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")) {  // 问题点:为什么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);
        }
    }


在网上找的这么一段代码,我搞不懂为什么会有这个分支:if (linuxVersion.equals("2.4"))
只有2.4版本的单独处理,其它版本统一处理,如果是2.41版本的,应该走哪个分支呢?
我担心上面这段代码不能在所有的LINUX系统上使用。
LINUX知识不太懂。望大牛们指点一二。

|
只有2.4版本的单独处理,其它版本统一处理,如果是2.41版本的,应该走哪个分支呢?
-----------------
貌似还没有2.41这样的版本  现在最高是2.6
如果你要说2.4.1的话 是属于2.4的
2.4到2.6跨度还是比较大的  
你这个java程序 也是调用系统的top命令来获取信息的吧 所以只要top命令有更新 显示格式变了的话 估计就不会满足要求了 毕竟你不是从底层直接得到的信息

你可以参照一下http://space.itpub.net/9623896/viewspace-77874 了解一下linux的版本号命名规则

|
2.4内核没用过,对比一下返回结果就可以了。
在2.6内核上:
[lihua@wuqingmin ~]$ top -b -n 1
top - 14:15:29 up  3:38,  2 users,  load average: 0.21, 0.32, 0.17
Tasks: 182 total,   1 running, 181 sleeping,   0 stopped,   0 zombie
Cpu(s): 15.3%us,  6.6%sy,  0.2%ni, 75.9%id,  1.6%wa,  0.1%hi,  0.2%si,  0.0%st
Mem:   2028408k total,  1634828k used,   393580k free,   204900k buffers
Swap:  2104504k total,        0k used,  2104504k free,   868212k cached

|
你linuxVersion print出来看看是什么先嘛。。。
他可能是写在2.6上跑的程序或在2.2上跑的,所以2.4是特殊的。。。

|
top命令是属于procps这个包 你可以把源码包下载下来去研究一下相关代码 看能不能用C写一个更通用的

|
那个代码已经考虑了2.4和2.6版本的内核的情况 应该已经差不多了 2.2以前内核的我都没用过
以后新内核有没有变化  谁也不知道

    
 
 

您可能感兴趣的文章:

  • linux下用java开发是不是JB就可以,JAVA在LINUX下开发有优势吧!
  • 请Linux 和Java 的高手回答:java JDK1.3.1 在红旗Linux Desktop 2.4 的问题,一定给分。
  • 用java读中文linux中的文件是正确的,用java读英文linux版本中的文件是乱码,如何使英文linux读出的文件数据也是中文的?
  • 请问在LINUX下JAVA的平台是什么?如我在WIN下开发了JAVA程序,如何在LINUX下运行呢?
  • 很多书上讲Linux为Java提供内核级支持,可是为什么我要用时还得装java虚拟机?
  • Linux下面的开发好的Java程序,如何部署到其他机器?开发好的Java图形程序,终端上能否用?等问题
  • 我用telnet登陆到linux下运行了一个java程序,在关闭了telnet后怎么能让这个java程序继续执行
  • 我用telnet登陆到linux下运行了一个java程序,在关闭了telnet后怎么能让这个java程序继续执行,请高手指点一下
  • Linux文件系统监控的Java类库 inotify-java
  • 请教一下,如果想在linux下开发java,选哪个版本的linux好一点
  • c在linux下有ncursor,java在linux下有什么?
  • linux下java,初学者,请指教。
  • 如何使用linux下的java编译器????
  • 一个初学Red Hat LINUX 9.0 --关于在LINUX上的java的安装
  • *****(高分!!!)求Java和Linux高手解决servlet远程管理linux用户密码的问题*****
  • Linux 下使用 Java 求教
  • JAVA项目在Linux下的开发和部署
  • Linux 是用java 语言写的吗?
  • 怎样在linux下编译java?
  • 将java从windows迁移到linux??
  • 求助:java实现显示linux下的cpu占用率,内存使用情况,硬盘占用情况
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教各位高手一个简单的问题:在JAVA 中如何才能取得一些系统信息?
  • 在Java中如何取得一个字符的ASCII码值?
  • 怎样取得java中数组的长度
  • 在java中如何取得客户端的IP地址?
  • 怎么在linux下用java取得它的版本号:version
  • 请问在java中如何取得当前工作目录?
  • 在java中怎么取得哪个是光驱?
  • JAVA中如何取得ZIP文件中的文件LASTMODIFY时间?
  • 在Java中如何取得随机数
  • JAVA中如何取得文件的LASTMODIFY时间?File中只有setLastModify方法
  • java里面怎么取得网卡的MAC地址
  • 如何用JAVA程序取得UNIX机器下的当前用户?
  • 能不能通过java来取得显卡里显存某一段的数据
  • 请问如何在Java中调用一个VB所写的DLL?如何调用这个Dll的方法?如何取得和设置这个Dll的属性值?谢谢!
  • !!!在Java中如何取得Resultset中的datetime和timestamp字段?数据库是SQLServer
  • 问题:如何使用Java取得系统JAVA_HOME的设置和classpath路径信息
  • java根据方法名称取得反射方法的参数类型示例
  • 有关JAVA class文件在UNIX下取得文件相对路径的问题
  • 谁知道用JAVA怎么取得网络内的机器ip地址?
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 用java读中文linux中的文件是正确的,用java读英文linux版本中的文件是乱码,如何使英文linux读出的文件数据也是中文的? iis7站长之家
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3