我已经看了很长一段时间了。 我们运行一个有多个Docker容器的服务器,其中一个有一个用c#编写的Mono服务器应用程序。
基本图像是phusion base( http://phusion.github.io/baseimage-docker/ )
到目前为止,这个工作进展顺利,今天晚上,我们突然开始看到巨大的CPU峰值,放慢了我们整个网站,甚至使它完全无法访问。
自一周左右以来,我一直没有任何改变。 我非常怀疑这个问题是由于源代码错误。 同样的应用程序(如在完全相同的可执行文件)可以在Docker或Mac上的同一服务器上正常工作。 我已经尝试过的事情:
查看我们的进程树的屏幕截图:
如果任何人都可以帮助我们,这将是太棒了! 我更愿意提供更多的细节;)提前感谢!
好的,我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%;)