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;
    }
}
相关推荐
无糖冰可乐2120 分钟前
IDEA多java版本切换
java·ide·intellij-idea
合作小小程序员小小店27 分钟前
web开发,在线%超市销售%管理系统,基于idea,html,jsp,java,ssh,sql server数据库。
java·前端·sqlserver·ssh·intellij-idea
brucelee18627 分钟前
IntelliJ IDEA 设置 Local History 永久保留
java·ide·intellij-idea
大聪明-PLUS2 小时前
如何使用 Docker 打包一个简单的应用程序:简易指南
linux·嵌入式·arm·smarc
Pluto_CSND2 小时前
Java中的静态代理与动态代理(Proxy.newProxyInstance)
java·开发语言
深耕AI3 小时前
【完整教程】宝塔面板FTP配置与FileZilla连接服务器
运维·服务器
百***46453 小时前
Java进阶-在Ubuntu上部署SpringBoot应用
java·spring boot·ubuntu
serve the people3 小时前
Prompts for Chat Models in LangChain
java·linux·langchain
一叶飘零_sweeeet4 小时前
不止于 API 调用:解锁 Java 工具类设计的三重境界 —— 可复用性、线程安全与性能优化
java·工具类
李昊哲小课4 小时前
Ubuntu 24.04 MariaDB 完整安装与配置文档
linux·ubuntu·mariadb