使用crypto/ssh和golang运行iperf3 目标

使用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代码挂在下面的行上。请参见功能

使用Golang的crypto/ssh在两个VM上运行iperf3以测量吞吐量

手动过程 下面是对工作的手动过程的描述。我正试图在戈朗做同样的事情

手动进近:从跳线盒连接到VM1,并作为
服务器运行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)
}