使用crypto/ssh和golang运行iperf3 目标
使用Golang的crypto/ssh在两个VM上运行iperf3以测量吞吐量 手动过程 下面是对工作的手动过程的描述。我正试图在戈朗做同样的事情 手动进近:从跳线盒连接到VM1,并作为使用crypto/ssh和golang运行iperf3 目标,go,performance-testing,channel,iperf3,Go,Performance Testing,Channel,Iperf3,使用Golang的crypto/ssh在两个VM上运行iperf3以测量吞吐量 手动过程 下面是对工作的手动过程的描述。我正试图在戈朗做同样的事情 手动进近:从跳线盒连接到VM1,并作为服务器运行iperf 您可以从上面的图像中看到服务器正在那里侦听。同一命令挂起golang代码,如下所述 手动进近:从跳线盒连接到VM2,并作为客户端运行iperf 所有这些在命令行中都非常有效。下面是关于使用Golang的说明,但代码挂起 问题:golang代码挂起 golang代码挂在下面的行上。请参见功能
服务器运行iperf
您可以从上面的图像中看到服务器正在那里侦听。同一命令挂起golang代码,如下所述
手动进近:从跳线盒连接到VM2,并作为客户端运行iperf
所有这些在命令行中都非常有效。下面是关于使用Golang的说明,但代码挂起
问题:golang代码挂起
golang代码挂在下面的行上。请参见功能:
putVM1IntoServerMode()
代码挂起:
putVM1IntoServerMode() {}
# Code hangs here
out, err :=
VMConnectServer.hostSession.CombinedOutput(VMConnectServer.commands[0])
...
}
这是一种预期,因为您在手动过程中看到:
主代码
如何解决
我是否使用通道异步运行代码?
解决这个问题的最好办法是什么
感谢您的指导。成功!
在iperf的服务器端运行时,非常棘手
func runIperfTestsFromVM2() string {
fmt.Println(VMConnectClient.commands[0])
out, err := VMConnectClient.hostSession.CombinedOutput("sh -c 'nohup iperf3 -s -p 5001 > /dev/null 2>&1 &'")
if err != nil {
panic(err)
}
fmt.Println(string(out))
return string(out)
}
putVM1IntoServerMode() {}
# Code hangs here
out, err :=
VMConnectServer.hostSession.CombinedOutput(VMConnectServer.commands[0])
...
}
type VMCONNECT struct {
hostConnection *ssh.Client
hostSession *ssh.Session
user string
hostPort string
commands []string
password string
}
var VMConnectServer = VMCONNECT{
nil,
nil,
"testadmin",
"169.61.222.12:22",
[]string{"iperf3 -s -p 5001"},
"????",
}
/*************************************
Logic
connect to server
put vm into server mode
connect to client
run iperf3 tests
close client
close server
**************************************/
func main() {
connectToServer()
putVM1IntoServerMode()
// other code ommitted for brevity
}
# This works fine, no issues
func connectToServer() {
var err error
VMConnectServer.hostConnection, VMConnectServer.hostSession, err = connectToHost(VMConnectServer.user, VMConnectServer.hostPort)
if err != nil {
panic(err)
}
}
# Code hangs here
func putVM1IntoServerMode() {
# Code hangs here
out, err := VMConnectServer.hostSession.CombinedOutput(VMConnectServer.commands[0])
if err != nil {
panic(err)
}
fmt.Println(string(out))
}
func runIperfTestsFromVM2() string {
fmt.Println(VMConnectClient.commands[0])
out, err := VMConnectClient.hostSession.CombinedOutput("sh -c 'nohup iperf3 -s -p 5001 > /dev/null 2>&1 &'")
if err != nil {
panic(err)
}
fmt.Println(string(out))
return string(out)
}