欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java语言如何优雅的与linux交互 PelicanDT

程序员文章站 2024-03-18 17:54:28
...

使用java语言与Linux交互

PelicanDT(Pelican Distributed Test),是阿里云提供的一款针对 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());
    /**
         * 打印到的信息:
         * [aaa@qq.com ~]$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
         * [aaa@qq.com ~]$export HISTFILE=/dev/null
         * [aaa@qq.com ~]$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);
  }

阿里云官方帮助文档:
github开源地址

----------------------------------------- 广告时间 -----------------------------------------

各位看官, 欢迎关注公众号,每天推送有意思的小东西哦!!! 嘻嘻

java语言如何优雅的与linux交互 PelicanDT

相关标签: java linux