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);
}
----------------------------------------- 广告时间 -----------------------------------------
各位看官, 欢迎关注公众号,每天推送有意思的小东西哦!!! 嘻嘻
上一篇: canvas实现数字雨效果
下一篇: 用C语言实现strcat函数