需要用到jcraft依赖,如果依赖失效,请前往官方获取jcraft官网,maven地址https://search.maven.org/artifact/com.jcraft/jsch

        <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>

一个java类就可以了


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;/*** 远程调用Linux shell 命令** @author wei.Li by 14-9-2.*/
class LinuxStateForShell {public static final String CPU_MEM_SHELL = "top -b -n 1";public static final String FILES_SHELL = "df -hl";public static final String[] COMMANDS = {CPU_MEM_SHELL, FILES_SHELL};public static final String LINE_SEPARATOR = System.getProperty("line.separator");private static Session session;/*** 连接到指定的HOST** @return isConnect* @throws JSchException JSchException*/private static boolean connect(String user, String passwd, String host) {JSch jsch = new JSch();try {session = jsch.getSession(user, host, 22);session.setPassword(passwd);java.util.Properties config = new java.util.Properties();config.put("StrictHostKeyChecking", "no");session.setConfig(config);session.connect();} catch (JSchException e) {e.printStackTrace();System.out.println("connect error !");return false;}return true;}/*** 远程连接Linux 服务器 执行相关的命令** @param commands 执行的脚本* @param user     远程连接的用户名* @param passwd   远程连接的密码* @param host     远程连接的主机IP* @return 最终命令返回信息*/public static Map<String, String> runDistanceShell(String[] commands, String user, String passwd, String host) {if (!connect(user, passwd, host)) {return null;}Map<String, String> map = new HashMap<>();StringBuilder stringBuffer;BufferedReader reader = null;Channel channel = null;try {for (String command : commands) {stringBuffer = new StringBuilder();channel = session.openChannel("exec");((ChannelExec) channel).setCommand(command);channel.setInputStream(null);((ChannelExec) channel).setErrStream(System.err);channel.connect();InputStream in = channel.getInputStream();reader = new BufferedReader(new InputStreamReader(in));String buf;while ((buf = reader.readLine()) != null) {//舍弃PID 进程信息if (buf.contains("PID")) {break;}stringBuffer.append(buf.trim()).append(LINE_SEPARATOR);}//每个命令存储自己返回数据-用于后续对返回数据进行处理map.put(command, stringBuffer.toString());}} catch (IOException | JSchException e) {e.printStackTrace();} finally {try {if (reader != null) {reader.close();}} catch (IOException e) {e.printStackTrace();}if (channel != null) {channel.disconnect();}session.disconnect();}return map;}/*** 直接在本地执行 shell** @param commands 执行的脚本* @return 执行结果信息*/public static Map<String, String> runLocalShell(String[] commands) {Runtime runtime = Runtime.getRuntime();Map<String, String> map = new HashMap<>();StringBuilder stringBuffer;BufferedReader reader;Process process;for (String command : commands) {stringBuffer = new StringBuilder();try {process = runtime.exec(command);InputStream inputStream = process.getInputStream();reader = new BufferedReader(new InputStreamReader(inputStream));String buf;while ((buf = reader.readLine()) != null) {//舍弃PID 进程信息if (buf.contains("PID")) {break;}stringBuffer.append(buf.trim()).append(LINE_SEPARATOR);}} catch (IOException e) {e.printStackTrace();return null;}//每个命令存储自己返回数据-用于后续对返回数据进行处理map.put(command, stringBuffer.toString());}return map;}/*** 处理 shell 返回的信息* <p>* 具体处理过程以服务器返回数据格式为准* 不同的Linux 版本返回信息格式不同** @param result shell 返回的信息* @return 最终处理后的信息*/private static String disposeResultMessage(Map<String, String> result) {StringBuilder buffer = new StringBuilder();for (String command : COMMANDS) {String commandResult = result.get(command);if (null == commandResult) continue;if (command.equals(CPU_MEM_SHELL)) {String[] strings = commandResult.split(LINE_SEPARATOR);//将返回结果按换行符分割for (String line : strings) {line = line.toUpperCase();//转大写处理//处理CPU Cpu(s): 10.8%us,  0.9%sy,  0.0%ni, 87.6%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0%stif (line.startsWith("CPU(S):")) {String cpuStr = "CPU 用户使用占有率:";try {cpuStr += line.split(":")[1].split(",")[0].replace("US", "");} catch (Exception e) {e.printStackTrace();cpuStr += "计算过程出错";}buffer.append(cpuStr).append(LINE_SEPARATOR);//处理内存 Mem:  66100704k total, 65323404k used,   777300k free,    89940k buffers} else if (line.startsWith("MEM")) {String memStr = "内存使用情况:";try {memStr += line.split(":")[1].replace("TOTAL", "总计").replace("USED", "已使用").replace("FREE", "空闲").replace("BUFFERS", "缓存");} catch (Exception e) {e.printStackTrace();memStr += "计算过程出错";buffer.append(memStr).append(LINE_SEPARATOR);continue;}buffer.append(memStr).append(LINE_SEPARATOR);}}} else if (command.equals(FILES_SHELL)) {//处理系统磁盘状态buffer.append("系统磁盘状态:");try {buffer.append(disposeFilesSystem(commandResult)).append(LINE_SEPARATOR);} catch (Exception e) {e.printStackTrace();buffer.append("计算过程出错").append(LINE_SEPARATOR);}}}return buffer.toString();}//处理系统磁盘状态/*** Filesystem            Size  Used Avail Use% Mounted on* /dev/sda3             442G  327G   93G  78% /* tmpfs                  32G     0   32G   0% /dev/shm* /dev/sda1             788M   60M  689M   8% /boot* /dev/md0              1.9T  483G  1.4T  26% /ezsonar** @param commandResult 处理系统磁盘状态shell执行结果* @return 处理后的结果*/private static String disposeFilesSystem(String commandResult) {String[] strings = commandResult.split(LINE_SEPARATOR);// final String PATTERN_TEMPLATE = "([a-zA-Z0-9%_/]*)\\s";int size = 0;int used = 0;for (int i = 0; i < strings.length - 1; i++) {if (i == 0) continue;int temp = 0;for (String s : strings[i].split("\\b")) {if (temp == 0) {temp++;continue;}if (!s.trim().isEmpty()) {if (temp == 1) {size += disposeUnit(s);temp++;} else {used += disposeUnit(s);temp = 0;}}}}return new StringBuilder().append("大小 ").append(size).append("G , 已使用").append(used).append("G ,空闲").append(size - used).append("G").toString();}/*** 处理单位转换* K/KB/M/T 最终转换为G 处理** @param s 带单位的数据字符串* @return 以G 为单位处理后的数值*/private static int disposeUnit(String s) {try {s = s.toUpperCase();String lastIndex = s.substring(s.length() - 1);String num = s.substring(0, s.length() - 1);int parseInt = Integer.parseInt(num);if (lastIndex.equals("G")) {return parseInt;} else if (lastIndex.equals("T")) {return parseInt * 1024;} else if (lastIndex.equals("M")) {return parseInt / 1024;} else if (lastIndex.equals("K") || lastIndex.equals("KB")) {return parseInt / (1024 * 1024);}} catch (NumberFormatException e) {e.printStackTrace();return 0;}return 0;}public static void main(String[] args) {Map<String, String> result = runDistanceShell(COMMANDS, "root", "password", "192.168.12.12");System.out.println(disposeResultMessage(result));}}

显示效果如下:

CPU 用户使用占有率: 14.5%
内存使用情况:  65972228K 总计, 55482940K 已使用, 10489288K 空闲,  3216072K 缓存
系统磁盘状态:大小 986G , 已使用25G ,空闲961G

Java获取linux服务器cpu、内存、硬盘相关信息相关推荐

  1. java 监控linux服务器cpu使用率、内存使用率、磁盘使用率、java进程是否存活等服务

    java 监控linux服务器cpu.内存.java进程是否存活,发现异常发送邮件提醒 前一段时间在维护一个N年前的项目,这个项目有十几个服务器,每个服务器上有十几个服务.接手后的几个星期天天有事,要 ...

  2. 处理器仿存带宽_linux服务器CPU内存硬盘读写带宽等性能测试方法

    如何对一个VPS主机进行CPU内存,硬盘IO读写,带宽速度等项目测试,像UnixBench和压力测试则可以综合反映一个VPS的性能水平,方便大家对照参考. VPS性能测试:CPU内存,硬盘IO读写,带 ...

  3. 树莓派-4-温度CPU内存硬盘状态信息

    获取树莓派当前状态和数据(温度.CPU.内存.硬盘) 1 CPU和操作系统信息 1.1 CPU信息 $ sudo cat /proc/cpuinfo $ sudo cat /proc/cpuinfo ...

  4. golang 获取cpu 内存 硬盘 使用率 信息 进程信息

    目录 1.获取 cpu 内存 磁盘使用率 2.获取本机信息 3. 获取CPU信息 4. 获取内存信息 5.获取磁盘信息 6.获取网络信息 7. 获取进程信息 使用库: go get github.co ...

  5. php获取linux服务器CPU、内存、硬盘使用率的实现代码

    define("MONITORED_IP", "172.16.0.191"); //被监控的服务器IP地址 也就是本机地址 define("DB_SE ...

  6. python glances来监控linux服务器CPU 内存 IO使用

    什么是 Glances? Glances 是一个由 Python 编写,使用 psutil 库来从系统抓取信息的基于 curses 开发的跨平台命令行系统监视工具. 通过 Glances,我们可以监视 ...

  7. php 获取服务器进程数,PHP 获取linux服务器性能CPU、内存、硬盘、进程等使用率...

    数据库配置文件: conn.php define("MONITORED_IP", "172.16.0.191"); //被监控的服务器IP地址 也就是本机地址 ...

  8. java 获取服务器上文件,java获取远程服务器上的文件

    java获取远程服务器上的文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei J ...

  9. linux服务器上的项目读取本地文件,java访问linux服务器读取文件路径

    java访问linux服务器读取文件路径 内容精选 换一换 通过ADC将文件传输到Host.参见准备环境完成环境配置.以运行用户登录安装Toolkit组件的服务器.执行命令,将A.java文件传输到H ...

最新文章

  1. 一个查看全部用户的磁盘空间使用情况的脚本
  2. R语言将多个dataframe导出到excel的多个表单(sheet)实战
  3. 华字后面配什么字比较好_涟字女孩取名字含义 带涟好名推荐
  4. 【Linux】一步一步学Linux——env命令(201)
  5. 向量时钟Vector Clock in Riak
  6. 关于MacBook Pro 15 usb连接iPhone反复重连的解决办法
  7. Java如何获得系统时间
  8. C语言实现合并两个链表 含注释
  9. centos是什么linux操作系统,CentOS系统是什么
  10. openwrt 需要高级浏览器_树莓派 + OpenWrt 实现 BT 下载机
  11. 冒泡排序代码(升序+降序)
  12. Excel多级下拉菜单的制作
  13. 什么是存储过程?有什么优点?
  14. 利用云片网提供的API发送短信
  15. 微信又更新了,分享几个实用的微信神器
  16. Vue CLI 预设Presets
  17. 如何在wince下添加和删除驱动(作者:wogoyixikexie@gliet)
  18. HTML <kbd> 标签
  19. JavaScript 普通函数的三种写法
  20. FPM五:拆解前面的四——OVP做查询和结果

热门文章

  1. spark.mllib:GradientBoostedTrees
  2. Apache Spark 2.0: 机器学习模型持久化
  3. Player启动时提示 System.InvalidOperationException:无法加载计数器名称数据
  4. 华为nova好不好 先看图
  5. 【BZOJ 2744 】[HEOI2012]朋友圈
  6. 设计模式C#实现(十六)——中介者模式
  7. window7 MySql Cluster数据库集群配置
  8. socket通信数据类型
  9. 《大数据,小时代,向移动互联网迁徙-2012上半年移动互联网数据分享》_DCCI
  10. HTML5学习笔记(三):HTML5的智能提示在VisualStudio2010