docker容器中查看线程上下文切换次数为0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker容器中查看线程上下文切换次数为0相关的知识,希望对你有一定的参考价值。

参考技术A 要在Docker容器中查看线程上下文切换次数,可以使用以下命令:

```
pidstat -w
```

这条命令会显示有关CPU使用情况的各种统计数据, 包括线程上下文切换次数,其中-w选项表示显示上下文切换次数。

如果您没有安装pidstat,可以使用以下命令来安装:

```
apt-get update && apt-get install sysstat
```

这个命令将使用apt-get工具安装sysstat包,该包包含pidstat命令。

请注意,在容器中使用pidstat时,它将显示该容器中正在运行的所有进程的统计信息,而不仅仅是当前正在活动的进程。如果你只想看到单个进程的上下文切换次数,可以使用以下命令:

```
pidstat -w -p [PID]
```

PID指的是你想要查看的进程的ID。这应该只显示指定进程的上下文切换次数。

在 Windows 版本 10.0.18363 中无法切换到 Docker 中的 Windows 容器

【中文标题】在 Windows 版本 10.0.18363 中无法切换到 Docker 中的 Windows 容器【英文标题】:In Windows Version 10.0.18363 Cannot Switch to Windows container in Docker 【发布时间】:2021-10-29 12:00:43 【问题描述】:

上下文:

-Windows 版本:10.0.18363 Build 18263 -Docker 信息:

 Cloud integration: 1.0.17
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:58:50 2021
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

-计算机:Surface Laptop 3 -Docker 设置:Docker Settings Screenshot

问题:

在过去的四天里,我一直无法在我的计算机上切换到 windows 容器,也无法运行 windows 容器。每次我尝试切换到 Windows 容器时,都会出现以下错误:

System.ServiceProcess.TimeoutException:
Time out has expired and the operation has not been completed.
   at System.ServiceProcess.ServiceController.WaitForStatus(ServiceControllerStatus desiredStatus, TimeSpan timeout)
   at Docker.Backend.Processes.WindowsDockerDaemon.TryToStartService(Settings settings, String args, Dictionary`2 env) in C:\workspaces\master-merge\src\github.com\docker\pinata\win\src\Docker.Backend\Processes\WindowsDockerDaemon.cs:line 208
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_1.<GetExecutor>b__0(Object instance, Object[] methodParameters)
   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()

然后我得到“重置为出厂默认设置”选项,当我单击它时,它会挂起很长时间,而 docker 尝试再次启动并最终崩溃。我试过:重启我的电脑,重启Docker,卸载并重新安装Docker,删除daemon.json文件,降级我的windows版本,然后再次升级。我不知道如何从这里尝试让我的 Windows 容器在我的机器上运行。

【问题讨论】:

请提供足够的代码,以便其他人更好地理解或重现问题。 没有代码,尝试运行 docker 容器时出现问题。 【参考方案1】:

在link 之后,我刚刚进入 c:/ProgramData/Docker 并删除了 panic.log 文件的只读权限。然后我重新启动了 Docker,它工作了。

【讨论】:

以上是关于docker容器中查看线程上下文切换次数为0的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 版本 10.0.18363 中无法切换到 Docker 中的 Windows 容器

CPU上下文切换分析

零拷贝

CPU上下文切换的次数和时间(context switch)

java多线程 上下文切换

java多线程 上下文切换