Linux

在 docker 中執行的 C# 應用程序(單聲道)會產生巨大的 CPU 峰值

  • September 18, 2015

我已經看了很長時間了。我們執行一個有多個 Docker 容器的伺服器,其中一個有一個用 c# 編寫的 Mono 伺服器應用程序。

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

這一直執行良好,直到今天晚上,我們突然開始看到巨大的 CPU 峰值,減慢了我們整個網站的速度,甚至使它完全無法訪問。

自一周左右以來,我沒有改變任何東西。我非常懷疑這個問題是因為原始碼錯誤而出現的。同樣的應用程序(在完全相同的執行檔中)也可以在 docker 外部的同一台伺服器或我的 mac 上正常工作。我嘗試過的事情:

  • 在我的本地電腦上執行應用程序(有效,沒有 cpu 峰值)
  • 在 docker 之外執行應用程序(但在同一台伺服器上)(沒有 cpu 峰值)
  • 重建沒有記憶體的圖像(沒有工作)

請參閱我們的流程樹的螢幕截圖: 在此處輸入圖像描述

如果有人可以幫助我們,那就太棒了!我非常願意提供更多細節;)提前非常感謝!

好的,我找到了!顯然,該過程被困在一個while循環中,因為它正在偵聽stdin中的命令。

CPU 峰值一直存在,但我們從未註意到(直到我們在網站上對更多人進行了更大的測試)所以在搜尋之後,我發現你可以這樣做來“關閉”標準輸入以確保它不會繼續閱讀後台數據:

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

其中 command 是你的命令,它是尖峰 cpu。

對我來說,完整的命令是:

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

CPU 現在下降到 7% ;)

引用自:https://serverfault.com/questions/723136