Java 获取 Linux服务器主机名称、内网ip、cpu使用率、内存使用率、磁盘使用率、JVM使用率

下面的代码直接打包带走使用

1、pom文件依赖

xml 复制代码
 <dependency>
     <groupId>com.jcraft</groupId>
     <artifactId>jsch</artifactId>
     <version>0.1.55</version> <!-- 请根据实际情况检查最新版本 -->
 </dependency>

2、代码

java 复制代码
package com.xffy.order.controller;

import com.jcraft.jsch.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class LinuxServerInfo {

    public static void main(String[] args) {
        String host = "10.15.111.15";
        int port = 22;
        String username = "zhang";
        String password = "123456";

        try {
            // 创建JSch对象
            JSch jsch = new JSch();

            // 创建会话
            Session session = jsch.getSession(username, host, port);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword(password);

            // 连接
            session.connect();

            // 获取服务器信息
            String serverName = executeCommand(session, "hostname");
            String internalIP = executeCommand(session, "hostname -I | awk '{print $1}'");
            String cpuUsage = executeCommand(session, "top -bn1 | grep 'Cpu(s)' | awk '{print $2 + $4}'");
            String memoryUsage = executeCommand(session, "free | awk 'NR==2 {print $3/$2*100}'");
            String diskUsage = executeCommand(session, "df -h | awk '$NF==\"/\"{print $5}'");
            double jvmUsage = getJVMUsage();
            String jvmUsageStr = String.format("%.0f", jvmUsage)  + "%";

            // 打印结果
            System.out.println("Server Name: " + serverName);
            System.out.println("Internal IP: " + internalIP);
            System.out.println("CPU Usage: " + cpuUsage + "%");
            System.out.println("Memory Usage: " + memoryUsage + "%");
            System.out.println("Disk Usage: " + diskUsage);
            System.out.println("JVM Usage: " + jvmUsageStr);

            // 关闭会话
            session.disconnect();

        } catch (JSchException e) {
            e.printStackTrace();
        }
    }

    // 执行Shell命令并获取输出
    private static String executeCommand(Session session, String command) throws JSchException {
        StringBuilder output = new StringBuilder();

        try {
            // 创建通道
            Channel channel = session.openChannel("exec");
            ((ChannelExec) channel).setCommand(command);

            // 获取输入流
            InputStream inputStream = channel.getInputStream();

            // 连接通道
            channel.connect();

            // 读取命令输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;

            while ((line = reader.readLine()) != null) {
                output.append(line).append("\n");
            }

            // 关闭通道
            channel.disconnect();

        } catch (IOException e) {
            e.printStackTrace();
        }

        return output.toString().trim();
    }

    // 获取JVM使用率
    private static double getJVMUsage() {
        Runtime runtime = Runtime.getRuntime();
        double totalMemory = runtime.totalMemory();
        double freeMemory = runtime.freeMemory();
        double maxMemory = runtime.maxMemory();

        double jvmUsage = ((totalMemory - freeMemory) / maxMemory) * 100;
        return jvmUsage;
    }
}
相关推荐
代码小鑫几秒前
A034-基于Spring Boot的供应商管理系统的设计与实现
java·开发语言·spring boot·后端·spring·毕业设计
scoone3 分钟前
ssh登陆服务器后支持Tab键命令补全
linux·shell
paopaokaka_luck7 分钟前
基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
java·数据库·vue.js·spring boot·后端·算法
guoruijun_2012_414 分钟前
fastadmin多个表crud连表操作步骤
android·java·开发语言
Hello-Brand25 分钟前
Java核心知识体系10-线程管理
java·高并发·多线程·并发·多线程模型·线程管理
乐悠小码31 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.32 分钟前
Pod控制器
java·开发语言
2的n次方_35 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林55135 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.36 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis