Linux
在 docker 中執行的 C# 應用程序(單聲道)會產生巨大的 CPU 峰值
我已經看了很長時間了。我們執行一個有多個 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% ;)