Linux 上的南希正在使用 100% CPU
Nancy on Linux is using 100% CPU
我的 nancy web-apps 一起用完了 100% CPU 但实际上并没有使用它们。
它们 运行 在单声道的 docker 容器内。我唯一能想到的就是我的主函数中的无限循环,比如
while(Console.ReadLine() != "quit") {}
但我认为,Console.ReadLine()
会阻塞,因此这个循环只会执行,只要有一些输入,这是不应该有的。艾米我错过了什么? nancy 在单声道中用完所有 CPU 是否还有其他原因? - 在开发过程中 Windows 似乎 运行 没问题。
更新:
docker中的应用程序只是从mono NancyServer.exe
开始。内存使用率远低于之前的基于 XPS 的版本(50-70MB 而不是 160-180MB),但基于 XPS 的应用程序使用的内存不到 CPU 的 0.1%(也没有真正做任何事情)
高 CPU 负载是由 while 循环引起的,因为您没有让当前线程短时间进入 sleep。喜欢:
while(Console.ReadLine() != "quit") {Thread.Sleep(10);}
如果使用 -t
or -i
options 的 none,我可以通过在前台启动容器来重现非阻塞行为。在那种情况下 Console.ReadLine()
不会阻塞。
如果使用 -i
或 -t
,则 Console.ReadLine
会阻塞。此外,如果我 运行 容器在后台(使用 -d
option),Console.ReadLine()
会阻塞。
如果您 运行 您的容器在前台,请确保使用 -t
或 -i
。
我的 nancy web-apps 一起用完了 100% CPU 但实际上并没有使用它们。
它们 运行 在单声道的 docker 容器内。我唯一能想到的就是我的主函数中的无限循环,比如
while(Console.ReadLine() != "quit") {}
但我认为,Console.ReadLine()
会阻塞,因此这个循环只会执行,只要有一些输入,这是不应该有的。艾米我错过了什么? nancy 在单声道中用完所有 CPU 是否还有其他原因? - 在开发过程中 Windows 似乎 运行 没问题。
更新:
docker中的应用程序只是从mono NancyServer.exe
开始。内存使用率远低于之前的基于 XPS 的版本(50-70MB 而不是 160-180MB),但基于 XPS 的应用程序使用的内存不到 CPU 的 0.1%(也没有真正做任何事情)
高 CPU 负载是由 while 循环引起的,因为您没有让当前线程短时间进入 sleep。喜欢:
while(Console.ReadLine() != "quit") {Thread.Sleep(10);}
如果使用 -t
or -i
options 的 none,我可以通过在前台启动容器来重现非阻塞行为。在那种情况下 Console.ReadLine()
不会阻塞。
如果使用 -i
或 -t
,则 Console.ReadLine
会阻塞。此外,如果我 运行 容器在后台(使用 -d
option),Console.ReadLine()
会阻塞。
如果您 运行 您的容器在前台,请确保使用 -t
或 -i
。