欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)獲取服務(wù)器資源(內(nèi)存,負(fù)載,磁盤(pán)容量)

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

1.說(shuō)明

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

2.封裝SSH操作方法

首先我們定義SSH連接實(shí)體類(lèi)。

/**
 * 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操作類(lèi)
 * @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í)行超時(shí) "+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命令

連接服務(wù)器

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

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

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

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

//負(fù)載
String cmd="sudo cat /proc/loadavg";
//磁盤(pán)
String cmd="sudo df -h";

4.效果呈現(xiàn)

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

監(jiān)控指標(biāo)

進(jìn)程監(jiān)控

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

相關(guān)文章

  • 深入學(xué)習(xí)Java同步機(jī)制中的底層實(shí)現(xiàn)

    深入學(xué)習(xí)Java同步機(jī)制中的底層實(shí)現(xiàn)

    在多線(xiàn)程編程中我們會(huì)遇到很多需要使用線(xiàn)程同步機(jī)制去解決的并發(fā)問(wèn)題,這些同步機(jī)制是如何實(shí)現(xiàn)的呢?下面和小編來(lái)一起學(xué)習(xí)吧
    2019-05-05
  • Java 數(shù)據(jù)結(jié)構(gòu)之刪除鏈表中重復(fù)的結(jié)點(diǎn)

    Java 數(shù)據(jù)結(jié)構(gòu)之刪除鏈表中重復(fù)的結(jié)點(diǎn)

    在一個(gè)排序的鏈表中,會(huì)存在重復(fù)的結(jié)點(diǎn),如何實(shí)現(xiàn)刪除該鏈表中重復(fù)的結(jié)點(diǎn),重復(fù)的結(jié)點(diǎn)不保留,并返回鏈表頭指針呢?接下來(lái)小編將帶你詳細(xì)介紹
    2021-12-12
  • java設(shè)計(jì)模式之組合模式(Composite)

    java設(shè)計(jì)模式之組合模式(Composite)

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之組合模式Composite,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Java中實(shí)現(xiàn)OCR識(shí)別讀取圖片中的文字

    Java中實(shí)現(xiàn)OCR識(shí)別讀取圖片中的文字

    圖片內(nèi)容一般無(wú)法編輯,如果想要讀取圖片中的文本,我們需要用到OCR工具,本文將介紹如何在Java中實(shí)現(xiàn)OCR識(shí)別讀取圖片中的文字,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 基于Java編寫(xiě)emoji表情處理工具類(lèi)

    基于Java編寫(xiě)emoji表情處理工具類(lèi)

    這篇文章主要為大家詳細(xì)介紹了如何基于Java編寫(xiě)一個(gè)emoji表情處理工具類(lèi),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • SpringBoot中使用Redis作為全局鎖示例過(guò)程

    SpringBoot中使用Redis作為全局鎖示例過(guò)程

    這篇文章主要為大家介紹了SpringBoot中使用Redis作為全局鎖示例過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java API如何實(shí)現(xiàn)向Hive批量導(dǎo)入數(shù)據(jù)

    Java API如何實(shí)現(xiàn)向Hive批量導(dǎo)入數(shù)據(jù)

    這篇文章主要介紹了Java API如何實(shí)現(xiàn)向Hive批量導(dǎo)入數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringMVC實(shí)現(xiàn)文件的上傳和下載實(shí)例代碼

    SpringMVC實(shí)現(xiàn)文件的上傳和下載實(shí)例代碼

    本篇文章主要介紹了SpringMVC實(shí)現(xiàn)文件的上傳和下載實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java中包裝類(lèi)和Arrays類(lèi)的詳細(xì)介紹

    Java中包裝類(lèi)和Arrays類(lèi)的詳細(xì)介紹

    Arrays針對(duì)于數(shù)組做操作的類(lèi),該類(lèi)包含用于操作數(shù)組的各種方法(如排序和搜索),這篇文章主要給大家介紹了關(guān)于Java中包裝類(lèi)和Arrays類(lèi)的詳細(xì)介紹,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • JAVA?IDEA項(xiàng)目打包為jar包的步驟詳解

    JAVA?IDEA項(xiàng)目打包為jar包的步驟詳解

    在Java開(kāi)發(fā)中我們通常會(huì)將我們的項(xiàng)目打包成可執(zhí)行的Jar包,以便于在其他環(huán)境中部署和運(yùn)行,下面這篇文章主要給大家介紹了關(guān)于JAVA?IDEA項(xiàng)目打包為jar包的相關(guān)資料,需要的朋友可以參考下
    2024-08-08

最新評(píng)論