![](/img/trans.png)
[英]Websockets running in background of go program causing 100% CPU usage
[英]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.