繁体   English   中英

是什么导致golang程序占用100%的CPU?

[英]What is causing golang program being at 100% CPU?

我有一个编写的golang程序(它是一个FTP服务器),运行时具有100%的CPU。 我在strace中看到:

futex(0xa83918, FUTEX_WAIT, 0, NULL

read(9, "", 4096)                       = 0
read(9, "", 4096)                       = 0
read(9, "", 4096)                       = 0
read(9, "", 4096)                       = 0
read(9, "", 4096)                       = 0

read(8, "", 4096)                       = 0
read(8, "", 4096)                       = 0
read(8, "", 4096)                       = 0
read(8, "", 4096)                       = 0
read(8, "", 4096)                       = 0

一遍又一遍。 它陷入了无限循环。 它主要用于循环是:

 for {
    tcpConn, err := listener.Accept()
    if err != nil {
      Server.logger.Print("listening error")
      break
    }   
    driver, err := Server.driverFactory.NewDriver()
    if err != nil {
      Server.logger.Print("Error creating driver, aborting client connection")
    } else {
      ftpConn := Server.newConn(tcpConn, driver, Server.Auth)
      go ftpConn.Serve()
    }   
  }

知道造成无限循环的原因是什么? 程序启动时,它并不处于这种不良状态。 它通常以正常的CPU使用率循环播放。 进入这种不良状态需要花费几个小时。

原来,这与TCP根本无关。 由于“ \\ n”输入问题,代码中的while循环永无休止。 即我有:

for {
  if something {
    break;
  }
}

而且它从未破产。

尝试在错误时创建新驱动程序时,请尝试关闭tcpConn。 另外,请尝试检查Server.newConn(tcpConn,驱动程序,Server.Auth)在完成连接后实际上是否关闭了连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM