为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

JAVA中远程监控LINUX主机CPU及内存代码实现

2017-09-02 11页 doc 31KB 90阅读

用户头像

is_511210

暂无简介

举报
JAVA中远程监控LINUX主机CPU及内存代码实现JAVA中远程监控LINUX主机CPU及内存代码实现 对于远程监控Linux主机系统CPU,内存使用情况,以前也使用了top等命令,但是最后还是觉得使用vmstat比较好. 运行top命令获得系统CPU使用情况有两个缺点, 第一运行top命令,执行的shell语句相对复杂. 用top命令获得CPU使用情况的shell语句 top -b -n 2 | grep Cpu |sed 1d | awk '{print $5}' | cut -f 1 -d "." 第二:有时候系统峰值时间很短暂,容易造成误判. 注意:运行...
JAVA中远程监控LINUX主机CPU及内存代码实现
JAVA中远程监控LINUX主机CPU及内存代码实现 对于远程监控Linux主机系统CPU,内存使用情况,以前也使用了top等命令,但是最后还是觉得使用vmstat比较好. 运行top命令获得系统CPU使用情况有两个缺点, 第一运行top命令,执行的shell语句相对复杂. 用top命令获得CPU使用情况的shell语句 top -b -n 2 | grep Cpu |sed 1d | awk '{print $5}' | cut -f 1 -d "." 第二:有时候系统峰值时间很短暂,容易造成误判. 注意:运行本例子,你还需要下载第三方ganymed-ssh2-build251beta1.jar,改软件主要用于通过ssh远程登录被监控主机. import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import java.io.*; public class test{ public static void main(String[] args) { Connection conn = null; boolean isAuthenticated = false; try { /* Create a connection instance */ conn = new Connection(hostname); // hostname 你要远程登录的主机IP地址,如10.0.2.1 /* Now connect */ conn.connect(); /* Authenticate. * If you get an IOException saying something like * "Authentication method password not supported by the server at this stage." * then please check the FAQ. */ isAuthenticated = conn.authenticateWithPassword(username, password); //你要远程登录的主机的用户名及密码,如admin/123456 //System.out.println("authenticate sucess ..........................."); if (isAuthenticated == false) System.out.println("SSH Login Authentication failed."); else { /* Create a session */ Session sess = conn.openSession(); System.out.println(new SysCpuInfo(sess).getCPUInfo()); /*注意,一个session只能执行一次shell,因此,如果你要再执行shell的话,必须重新创建一个session*/ sess.close(); sess = conn.openSession(); System.out.println(new SysMemInfo(sess).getMEMInfo()); sess.close(); } }catch(Exception e){System.out.println(e.toString());} } 1.读取CPU信息(SysCpuInfo.java) import java.io.*; import java.lang.*; import java.util.StringTokenizer; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; public class SysCpuInfo { private int CPU_IDLE=0; int processStatus =0; public SysCpuInfo(Session session) { InputStream is = null; BufferedReader brStat = null; StringTokenizer tokenStat= null ; Session sess = null; String str = ""; int i=0,j=0,cpuidle=0; /** * 对于执行linux shell. */ try{ sess = session; sess.execCommand("vmstat 2 10 "); /** * 执行vmstat命令获得系统CPU负载情况,vmstat 2 10表示2秒钟输出 一次共输出10组数据 * 显示结果如下: * [mon724@v0A-202-40-18 ~]$ vmstat 2 10 * procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ * r b swpd free buff cache si so bi bo in cs us sy id wa st * 1 0 41328 58860 199292 1877728 * 0 0 41328 58744 199292 1877884 0 0 0 0 1080 1057 3 0 96 0 0 * 0 0 41328 58084 199300 1878036 0 0 0 250 1310 1258 6 0 94 0 0 * 0 0 41328 57844 199300 1878148 0 0 0 32 761 697 3 0 97 0 0 * 0 0 41328 57852 199304 1878224 0 0 0 214 630 593 1 1 98 0 0 * 0 0 41328 56984 199304 1878372 0 0 0 50 1033 881 6 0 94 0 0 * 0 0 41328 56860 199304 1878440 0 0 0 0 536 578 2 0 98 0 0 * 1 0 41328 56868 199308 1878552 0 0 0 200 545 581 1 0 99 0 0 * 0 0 41328 56876 199308 1878644 0 0 0 102 628 663 1 0 99 0 0 * 0 0 41328 56876 199308 1878696 0 0 0 118 615 580 3 0 96 0 0 */ is = new StreamGobbler(sess.getStdout()); brStat = new BufferedReader(new InputStreamReader(is)); /*先读取第一行Title信息 * procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ * */ brStat.readLine(); /*读取第二行Title信息读取第三行信息 * r b swpd free buff cache si so bi bo in cs us sy id wa st * */ brStat.readLine(); /*读取第三行信息 * 1 0 41328 58860 199292 1877728 0 0 2 23 0 0 2 0 98 0 0 * 注意每次执行vmstat命令时,此行信息基本不变,因此不做为抽取数据使用 * */ brStat.readLine(); /*读取第4行到第12行信息 */ for(j=0;j<9;j++) { str = brStat.readLine(); if(str==null) break; tokenStat = new StringTokenizer(str); for(i=0;i<14;i++) { tokenStat.nextToken(); } cpuidle = cpuidle+new Integer(tokenStat.nextToken()).intValue(); } CPU_IDLE = new Double(cpuidle/9).intValue(); }catch(Exception e){System.out.println(e.toString());} } public int getCPUInfo() { return CPU_IDLE; } } 2.读取内存信息(SysMemInfo.java) import java.io.*; import java.lang.*; import java.sql.Statement; import java.sql.ResultSet; import java.util.StringTokenizer; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; public class SysMemInfo { private int MEM_INFO=0; public SysMemInfo(Session session,String hostname) { InputStream is = null; BufferedReader brStat = null; StringTokenizer tokenStat= null ; Session sess = null; String str = ""; int i=0,j=0,free=0,buff=0,cache=0,totalmemory=0,memidle=0; double memused=0; DataBaseCon datacon = null; ResultSet reset ; Statement stmt = null; /** * 对于执行linux shell中存在重定向和管道过滤的命令,需要使用命令组的形式. */ try{ datacon = new DataBaseCon(); stmt = datacon.getDBconnection().createStatement(); rese while(reset.next()) { totalmemory = reset.getInt("TOTAL_MEMORY"); } sess = session; sess.execCommand("vmstat 2 10 "); /** * 执行vmstat命令获得系统CPU负载情况,vmstat 2 10表示2秒钟输出 一次共输出10组数据 * 显示结果如下: * [mon724@v0A-202-40-18 ~]$ vmstat 2 10 * procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ * r b swpd free buff cache si so bi bo in cs us sy id wa st * 1 0 41328 58860 199292 1877728 0 0 2 23 0 0 2 0 98 0 0 * 0 0 41328 58744 199292 1877884 0 0 0 0 1080 1057 3 0 96 0 0 * 0 0 41328 58084 199300 1878036 0 0 0 250 1310 1258 6 0 94 0 0 * 0 0 41328 57844 199300 1878148 0 0 0 32 761 697 3 0 97 0 0 * 0 0 41328 57852 199304 1878224 0 0 0 214 630 593 1 1 98 0 0 * 0 0 41328 56984 199304 1878372 0 0 0 50 1033 881 6 0 94 0 0 * 0 0 41328 56860 199304 1878440 0 0 0 0 536 578 2 0 98 0 0 * 1 0 41328 56868 199308 1878552 0 0 0 200 545 581 1 0 99 0 0 * 0 0 41328 56876 199308 1878644 0 0 0 102 628 663 1 0 99 0 0 * 0 0 41328 56876 199308 1878696 0 0 0 118 615 580 3 0 96 0 0 */ is = new StreamGobbler(sess.getStdout()); brStat = new BufferedReader(new InputStreamReader(is)); /*先读取第一行Title信息 * procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ * */ brStat.readLine(); /*读取第二行Title信息读取第三行信息 * r b swpd free buff cache si so bi bo in cs us sy id wa st * */ brStat.readLine(); /*读取第三行信息 * 1 0 41328 58860 199292 1877728 0 0 2 23 0 0 2 0 98 0 0 * 注意每次执行vmstat命令时,此行信息基本不变,因此不做为抽取数 据使用 * */ brStat.readLine(); /*读取第4行到第12行信息 */ for(j=0;j<9;j++) { str = brStat.readLine(); if(str==null) break; tokenStat = new StringTokenizer(str); /*跳过每行前3列信息 * r b swpd * 1 0 41328 * */ for(i=0;i<3;i++) { tokenStat.nextToken(); } /* * 读取每行中free,buff,cache列信息 * r b swpd free buff cache si so bi bo in cs us sy id wa st * 1 0 41328 58860 199292 1877728 0 0 2 23 0 0 2 0 98 0 0 * * */ /*读取free的信息*/ free = free+new Integer(tokenStat.nextToken()).intValue(); //SysLogger.log("free is :" /*读取buff的信 息*/ buff = buff+new Integer(tokenStat.nextToken()).intValue(); //SysLogger.log("buff is :"+buff); /*读取cache的信息*/ cache = cache+new Integer(tokenStat.nextToken()).intValue(); //SysLogger.log("cache is :"+cache); } /* * =========================================================== * 获得内存IDLE的平均值,因为读取了9行数据因此需要除于9得出平均 值 * 对于应用程序来说系统真正的内存空余是free+buff+cache之和 * =========================================================== * */ memidle = (free+buff+cache)/9; /*获得内存占用率*/ memused = ((totalmemory-memidle)*100)/totalmemory; //SysLogger.log("SysMemInfo memidle is :"+memidle+"===memused is :"+memused); MEM_INFO = new Double(memused).intValue(); SysLogger.log("SysMemInfo MEM_INFO IS : "+MEM_INFO); }catch(Exception e){SysLogger.log("SysMemInfo error at line 39 :"+e.toString());} } public int getMEMInfo() { return MEM_INFO; } }
/
本文档为【JAVA中远程监控LINUX主机CPU及内存代码实现】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索