如何使用java語言優雅的與Linux互動

天愛有情發表於2020-03-15

PelicanDT(Pelican Distributed Test),是ali提供的一款針對 Linux 系統的測試環境模擬工具,是主要針對分散式應用提供的整合測試解決方案,用於幫助開發者簡單、高效地測試分散式應用。

PelicanDT 具有以下特點:

  • 使用 Java 語言與 Linux 系統互動。
  • 本地控制遠端伺服器上的 Linux 系統執行命令。
  • 通過簡單的操作對伺服器注入異常來模擬測試環境。例如:停止應用、CPU 佔用率過高、CPU 記憶體過高、網路中斷、網路流量延時等測試環境。

安裝PelicanDT

maven引入PelicanDT包

<dependency>
    <groupId>com.alibaba.pelican</groupId>
    <artifactId>PelicanDT</artifactId>
    <version>1.0.9</version>
</dependency>
複製程式碼

執行shell命令

public static void main(String[] args) {
    String ip = "127.0.0.1";
    String username = "root";
    String password = "root";

    RemoteCmdClientConfig remoteCmdClientConfig = new RemoteCmdClientConfig();
    remoteCmdClientConfig.setIp(ip);
    remoteCmdClientConfig.setUserName(username);
    remoteCmdClientConfig.setPassword(password);
    
    RemoteCmdClient remoteCmdClient = new RemoteCmdClient(remoteCmdClientConfig);
    RemoteCmdResult cmdResult = remoteCmdClient.execCmdWithPTY(new RemoteCmd("docker ps"));
    System.out.println(cmdResult.getStdInfo());
    /**
         * 列印到的資訊:
         * [root@izwz98p1f98lx99punh7ekz ~]$docker ps
         * CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
         * 8dc05b78881f        hub.c.163.com/library/nginx                            "nginx -g 'daemon ..."   4 months ago        Up 5 weeks          0.0.0.0:80->80/tcp       nginx
         * a8cf4f62fc84        registry.cn-shenzhen.aliyuncs.com/sunit/nacos-server   "bin/docker-startu..."   4 months ago        Up 3 months         0.0.0.0:8858->8848/tcp   nacos
         * [root@izwz98p1f98lx99punh7ekz ~]$export HISTFILE=/dev/null
         * [root@izwz98p1f98lx99punh7ekz ~]$exit
         * logout
         */
    }

複製程式碼

通過名稱識別符號停止應用

public static void main(String[] args) {
        String ip = "127.0.0.1";
        String username = "root";
        String password = "root";

        RemoteCmdClientConfig remoteCmdClientConfig = new RemoteCmdClientConfig();
        remoteCmdClientConfig.setIp(ip);
        remoteCmdClientConfig.setUserName(username);
        remoteCmdClientConfig.setPassword(password);

        RemoteCmdClient remoteCmdClient = new RemoteCmdClient(remoteCmdClientConfig);

    
    	// 通過名稱把該應用停止, 其實內部執行的是下面這個命令
        // ps -ef|grep nacos| grep -v grep | awk '{print $2}' | xargs kill -9
        remoteCmdClient.killProcess("nacos");
    }
複製程式碼

拉高伺服器記憶體佔用率

使用 PelicanDT 模擬伺服器記憶體佔用率為 75%、持續時間 1 分鐘的測試環境,具體操作步驟如下:

public static void main(String[] args) {
     //伺服器IP
     String ip = "";
     //伺服器使用者名稱
     String userName = "";
     //伺服器登入密碼
     String password = "";
     RemoteCmdClientConfig config = new RemoteCmdClientConfig();
     config.setIp(ip);
     config.setUserName(userName);
     config.setPassword(password);
     RemoteCmdClient client = new RemoteCmdClient(config);
     //記憶體佔用單位為M
     int percent = 6144;
     //持續時間單位分鐘
     int delayMinutes = 1;
     //記憶體佔用率拉高
     MemUtils.adjustMemUsage(client, percent, delayMinutes);
 }
複製程式碼

拉高伺服器 CPU 佔用率

在本示例中,將模擬 CPU 佔用率為 75%,持續時間 3 分鐘的環境

public static void main(String[] args) {
     //遠端伺服器IP
     String ip = "";
     //遠端伺服器使用者名稱
     String userName = "";
     //遠端伺服器登入密碼
     String password = "";
     RemoteCmdClientConfig config = new RemoteCmdClientConfig();
     config.setIp(ip);
     config.setUserName(userName);
     config.setPassword(password);
     RemoteCmdClient client = new RemoteCmdClient(config);
     //設定CPU佔用比例
     int percent = 70;
     //設定持續時間
     int delayMinutes = 3;
     //CPU佔用率拉高
     CpuUtils.adjustCpuUsage(client, percent, delayMinutes);
 }
複製程式碼

中斷伺服器網路

本示例將模擬伺服器網路中斷 30s 的環境,具體操作步驟如下:

public static void main(String[] args) {
      //遠端伺服器IP
      String ip = "";
      //遠端伺服器使用者名稱
      String userName = "";
      //遠端伺服器登入密碼
      String password = "";
      RemoteCmdClientConfig config = new RemoteCmdClientConfig();
      config.setIp(ip);
      config.setUserName(userName);
      config.setPassword(password);
      RemoteCmdClient client = new RemoteCmdClient(config);
      //設定blockIP,即需要設定網路中斷的伺服器 IP。
      String blockIP = "";
      //持續時間s
      int delaySecond = 30;
      //網路中斷
      NetAccessUtils.blockIPInput(client, blockIP, delaySecond);
  }
複製程式碼

延時伺服器網路

本示例將模擬伺服器網路延時為 1000 ms 且持續 10s 的測試環境,具體操作步驟如下:

public static void main(String[] args) {
      //遠端伺服器IP
      String ip = "";
      //遠端伺服器使用者名稱
      String userName = "";
      //遠端伺服器登入密碼
      String password = "";
      RemoteCmdClientConfig config = new RemoteCmdClientConfig();
      config.setIp(ip);
      config.setUserName(userName);
      config.setPassword(password);
      RemoteCmdClient client = new RemoteCmdClient(config);
      //延時時間 ms
      int delayTime = 1000;
      //持續時間s
      int delaySecond = 10;
      //網路延時
      NetTrafficUtils.setNetworkDelay(client, delayTime, delaySecond);
  }
複製程式碼

阿里官方幫助文件: help.aliyun.com/document_de…

github開源地址: github.com/alibaba/Pel…

----------------------------------------- 廣告時間 -----------------------------------------

各位看官,  歡迎關注公眾號,每天推送有意思的小東西哦!!! 嘻嘻

如何使用java語言優雅的與Linux互動

相關文章