Docker中运行的C#应用​​程序(单声道)会产生巨大的CPU峰值

我已经看了很长一段时间了。 我们运行一个有多个Docker容器的服务器,其中一个有一个用c#编写的Mono服务器应用程序。

基本图像是phusion base( http://phusion.github.io/baseimage-docker/ )

到目前为止,这个工作进展顺利,今天晚上,我们突然开始看到巨大的CPU峰值,放慢了我们整个网站,甚至使它完全无法访问。

自一周左右以来,我一直没有任何改变。 我非常怀疑这个问题是由于源代码错误。 同样的应用程序(如在完全相同的可执行文件)可以在Docker或Mac上的同一服务器上正常工作。 我已经尝试过的事情:

  • 在我的本地计算机上运行应用程序(工作,没有CPU峰值)
  • 在Docker外运行应用程序(但在同一台服务器上)(没有CPU峰值)
  • 重build没有caching的图像(没有工作)

查看我们的进程树的屏幕截图: 在这里输入图像说明

如果任何人都可以帮助我们,这将是太棒了! 我更愿意提供更多的细节;)提前感谢!

好的,我find了! 显然,这个过程被困在一个while循环中,因为它在stdin中听命令。

CPU尖峰总是在那里,但我们从来没有注意到(直到我们做了一个更大的testing与更多的人在网站上),所以search后,我发现你可以这样做“closures”的标准input,以确保它不会继续阅读数据在后台:

read x < /dev/fd/1 | <command>

在哪里命令是你的命令是扣人心弦的CPU。

对我来说,完整的命令是:

cd /opt/SteamBot && read x < /dev/fd/1 | mono --debug SteamBot.exe

CPU现在下降到7%;)