Java 获取服务器资源(内存、负载、磁盘容量)

1.说明

我们经常通过SSH终端发送shell命令进行服务器运维,从而获取到服务器的各种资源,按照这个思路,我们可以利用Java做一个定时任务,定时采集服务器资源使用情况,从而实现服务器资源的动态呈现。

2.封装SSH操作方法

首先我们定义SSH连接实体类。

/*** SSH连接* @author Mr.Li* @date 2023-01-01*/
public class SshConnection {private String username;private String password;private String hostname;public SshConnection(String username, String password, String hostname) {this.username = username;this.password = password;this.hostname = hostname;}public String getUsername() {return username;}public String getPassword() {return password;}public String getHostname() {return hostname;}
}

然后封装SSH命令操作方法

引入Jar包

        <dependency><groupId>org.apache.sshd</groupId><artifactId>sshd-core</artifactId><version>2.8.0</version></dependency><dependency><groupId>net.i2p.crypto</groupId><artifactId>eddsa</artifactId><version>0.3.0</version></dependency>
/*** SSH linux操作类* @author Mr.Li* @date 2023-01-06*/
@Slf4j
public class SSHLinuxUtils {/*** 执行Shell命令并返回结果* @param conn* @param cmd* @param timeout* @return* @throws IOException*/public static SshResponse runCommand(SshConnection conn, String cmd, long timeout) {SshClient client = SshClient.setUpDefaultClient();try {//Open the clientclient.start();//Connect to the serverString hostIp="";Integer port=22;String [] hostArr=conn.getHostname().split(":");if(hostArr.length>1){hostIp=hostArr[0];port=Integer.parseInt(hostArr[1]);}else{hostIp=hostArr[0];}ConnectFuture cf = client.connect(conn.getUsername(), hostIp, port);ClientSession session = cf.verify().getSession();session.addPasswordIdentity(conn.getPassword());session.auth().verify(TimeUnit.SECONDS.toMillis(timeout));//Create the exec and channel its output/error streamsChannelExec ce = session.createExecChannel(cmd);ByteArrayOutputStream out = new ByteArrayOutputStream();ByteArrayOutputStream err = new ByteArrayOutputStream();ce.setOut(out);ce.setErr(err);//Execute and waitce.open();Set<ClientChannelEvent> events =ce.waitFor(EnumSet.of(ClientChannelEvent.CLOSED), TimeUnit.SECONDS.toMillis(timeout));session.close(false);//Check if timed outif (events.contains(ClientChannelEvent.TIMEOUT)) {log.error(conn.getHostname()+" 命令 "+cmd+ "执行超时 "+timeout);}return new SshResponse(out.toString(), err.toString(), ce.getExitStatus());}catch (Exception e){log.error("runCommand:cmd:{}",cmd,e);return null;} finally {client.stop();}}
}

3.执行Shell命令

连接服务器

SshConnection sshConnection = new SshConnection("远程登录服务器用户名","远程登录服务器密码","远程登录服务器的IP端口");

以获取内存为例:

//获取内存的命令
String cmd="sudo cat /proc/meminfo";
//执行获取当前内存的命令
SshResponse sshResponse = SSHLinuxUtils.runCommand(sshConnection,cmd,3);
//其中StdOutput为获取到的内存数据
String outPut=sshResponse.getStdOutput();

获取负载与磁盘,则只需要经命令更换成如下命令即可

//负载
String cmd="sudo cat /proc/loadavg";
//磁盘
String cmd="sudo df -h";

4.效果呈现

结合自己的业务,以及之前介绍的关于Supervisor监控服务的对接,我们可以完成一个简单的服务运维业务。

监控指标

进程监控

有物联网需求的伙伴可以加我微信沟通交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/130811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依微服务前后端部署启动流程(只记录)

若依官网&#xff1a;https://www.ruoyi.vip/ 若依源码下载&#xff0c;直接zip既可&#xff1a;RuoYi-Cloud: &#x1f389; 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统&#xff0c;同时提供了 Vue3 的版本 下载解压&#xff0c;导入 idea&…

Jenkins 添加节点Node报错JNI error has occurred UnsupportedClassVersionError

节点日志 报错信息如下 Error: A JNI error has occurred, please check your installation and try again Exception in thread “main” java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime…

RabbitMQ与springboot整合

1、基本概念 Server&#xff1a;接收客户端的连接&#xff0c;实现AMQP实体服务&#xff1b;Connection&#xff1a;连接&#xff0c;应用程序与Server的网络连接&#xff0c;TCP连接&#xff1b;Channel&#xff1a;信道&#xff0c;消息读写等操作在信道中进行。客户端可以建…

Congestion Control for Large-Scale RDMA Deployments

文章目录 IntroductionDCQCNBuffer Setting Introduction PFC是粗粒度的流量控制机制&#xff0c;在端口层面发挥作用&#xff0c;不区别不同的流。这会导致很多弊端&#xff0c;比如不公平&#xff0c;受害流等。 解决PFC限制的解决方法是flow-level的拥塞控制&#xff0c;D…

目标识别项目实战:基于Yolov7-LPRNet的动态车牌目标识别算法模型(三)

前言 目标识别如今以及迭代了这么多年&#xff0c;普遍受大家认可和欢迎的目标识别框架就是YOLO了。按照官方描述&#xff0c;YOLOv8 是一个 SOTA 模型&#xff0c;它建立在以前 YOLO 版本的成功基础上&#xff0c;并引入了新的功能和改进&#xff0c;以进一步提升性能和灵活性…

Android开发-Android项目Jenkins自动化打包流程搭建与配置

Android 项目 Jenkins 自动化打包流程搭建与配置 1. 前言2. Jenkins 下载3. 配置电脑的 JDK 环境4. Jenkins 安装和设置5. Jenkins 设置 Android 项目自动打包流程 1. 前言 由于之前公司的 Android 项目需要 APK 自动打包的功能&#xff0c;所以需要搭建 Jenkins 自动化打包的…

【云计算网络安全】僵尸网络详解:工作原理、控制和保护方法

文章目录 一、什么是僵尸网络&#xff1f;二、僵尸网络因为什么原因而诞生&#xff1f;三、僵尸网络主要用途四、僵尸网络如何工作&#xff1f;五、如何控制僵尸网络&#xff1f;5.1 客户端/服务器僵尸网络模型5.1.1 星形网络拓扑5.1.2 多服务器网络拓扑5.1.3 分层网络拓扑 5.2…

3D开发工具HOOPS助力Eleven Dynamics加速开发QA自动化平台

Nexos平台提供强大的可视化功能&#xff0c;并将整体测量时间减少80%。 2021年10月19日&#xff0c;俄勒冈州本德市&#xff08;Newswire.com&#xff09;——工程软件开发工具包的领先供应商Tech Soft 3D今天宣布&#xff0c;Eleven Dynamics是一家位于瑞士的初创公司&#x…

知识增强语言模型提示 零样本知识图谱问答10.8

知识增强语言模型提示 零样本知识图谱问答 摘要介绍相关工作方法零样本QA的LM提示知识增强的LM提示与知识问题相关的知识检索 摘要 大型语言模型&#xff08;LLM&#xff09;能够执行 零样本closed-book问答任务 &#xff0c;依靠其在预训练期间存储在参数中的内部知识。然而&…

在SOLIDWORKS搭建一个简易的履带式机器人

文章目录 前言一、构建模型基本单元二、搭建车体模块三.插入轮子4.构建履带 前言 趁着十一假期&#xff0c;在solidworks中搭建了一个履带式机器人小车&#xff0c;计划将其应用在gazebo中完成多机器人编队的仿真。 一、构建模型基本单元 构建底板&#xff08;a面&#xff09…

Spring5应用之事务处理

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言事务…

arcgis添加天地图山东wtms服务

arcgis添加天地图wtms服务 首先打开天地图山东网站&#xff0c;进入首页![天地图山东首页](https://img-blog.csdnimg.cn/89df69e1c3d645b4a9e9652a08580342.png)然后点击开发资源进入开发页面点击成为开发者&#xff0c;进入申请秘钥页面&#xff0c;申请秘钥&#xff1b;![在…