最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)獲取服務器資源(內(nèi)存,負載,磁盤容量)

 更新時間:2025年07月21日 10:08:08   作者:大魚>  
這篇文章主要為大家詳細介紹了如何Java實現(xiàn)獲取服務器資源信息,包括內(nèi)存,負載,磁盤容量等內(nèi)容,感興趣的小伙伴可以跟隨小編一起學習一下

1.說明

我們經(jīng)常通過SSH終端發(fā)送shell命令進行服務器運維,從而獲取到服務器的各種資源,按照這個思路,我們可以利用Java做一個定時任務,定時采集服務器資源使用情況,從而實現(xiàn)服務器資源的動態(tài)呈現(xiàn)。

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 {

    /**
     * 執(zhí)行Shell命令并返回結(jié)果
     * @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 client
            client.start();
            //Connect to the server
            String 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 streams
            ChannelExec ce = session.createExecChannel(cmd);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ByteArrayOutputStream err = new ByteArrayOutputStream();
            ce.setOut(out);
            ce.setErr(err);
            //Execute and wait
            ce.open();
            Set<ClientChannelEvent> events =
                    ce.waitFor(EnumSet.of(ClientChannelEvent.CLOSED), TimeUnit.SECONDS.toMillis(timeout));
            session.close(false);
            //Check if timed out
            if (events.contains(ClientChannelEvent.TIMEOUT)) {
                log.error(conn.getHostname()+" 命令 "+cmd+ "執(zhí)行超時 "+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.執(zhí)行Shell命令

連接服務器

SshConnection sshConnection = new SshConnection("遠程登錄服務器用戶名","遠程登錄服務器密碼","遠程登錄服務器的IP端口");

以獲取內(nèi)存為例:

//獲取內(nèi)存的命令
String cmd="sudo cat /proc/meminfo";
//執(zhí)行獲取當前內(nèi)存的命令
SshResponse sshResponse = SSHLinuxUtils.runCommand(sshConnection,cmd,3);
//其中StdOutput為獲取到的內(nèi)存數(shù)據(jù)
String outPut=sshResponse.getStdOutput();

獲取負載與磁盤,則只需要經(jīng)命令更換成如下命令即可

//負載
String cmd="sudo cat /proc/loadavg";
//磁盤
String cmd="sudo df -h";

4.效果呈現(xiàn)

結(jié)合自己的業(yè)務,以及之前介紹的關于Supervisor監(jiān)控服務的對接,我們可以完成一個簡單的服務運維業(yè)務。

監(jiān)控指標

進程監(jiān)控

到此這篇關于Java實現(xiàn)獲取服務器資源(內(nèi)存,負載,磁盤容量)的文章就介紹到這了,更多相關Java獲取服務器資源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

西藏| 龙泉市| 长阳| 保定市| 共和县| 河东区| 林口县| 麻城市| 鸡泽县| 伊宁市| 石泉县| 弥渡县| 澄江县| 达孜县| 元朗区| 福州市| 芦溪县| 甘肃省| 仁怀市| 永胜县| 封开县| 蓬莱市| 敦化市| 达尔| 鄂尔多斯市| 伊通| 白银市| 沾益县| 新建县| 东乌珠穆沁旗| 西宁市| 新宁县| 葫芦岛市| 桓仁| 井研县| 泊头市| 江陵县| 曲周县| 青海省| 南岸区| 潞西市|