我想全面了解一个Docker容器的运行时性能成本。我发现网络的参考文献要慢大约100µs。
我还发现对运行时成本的引用“可以忽略不计”和“接近于零”,但我想更准确地了解这些成本是什么。理想情况下,我想知道Docker抽象的是什么,但需要付出性能代价,以及抽象出来的东西不需要付出性能代价。联网、CPU、内存等。
此外,如果存在抽象成本,是否有方法绕过抽象成本。例如,也许我可以直接挂载磁盘,而不是在Docker中虚拟挂载磁盘。
一篇出色的2014年IBM研究论文“虚拟机和Linux容器的更新性能比较”,作者Felter等人。提供裸机、KVM和Docker容器之间的比较。一般的结果是:Docker几乎与原生性能相同,并且在每一个类别中都快于KVM。
Docker的NAT是一个例外--如果您使用端口映射(例如Docker run-p 8080:8080
),那么您可能会在延迟方面遇到一个小问题,如下所示。但是,您现在可以在启动Docker容器时使用主机网络堆栈(例如,Docker run--net=host
),这将与本机列执行相同(如下面的Redis延迟结果所示)。
他们还在一些特定的服务上运行延迟测试,比如Redis。您可以看到,在20个客户端线程以上,最大的延迟开销是Docker NAT,然后是KVM,然后是Docker主机/本机之间的大致平局。
正因为这是一篇真正有用的论文,这里还有一些其他的数字。请下载以获得全面访问。
看看磁盘I/O:
现在看看CPU开销:
现在有一些关于内存的例子(阅读论文了解详细信息,内存可能是额外的棘手的):
假设我有一堆不同的docker容器,它们都是基于Python3.5的。在Ubuntu系统上使用Python3.5将所有任务作为后台进程同时运行(假设是5、10或20个容器),这一任务是否会使用更多/更少的资源?
我正在使用ApacheBench(ab)来测量两个nginx在Linux上的性能。它们有相同的配置文件。唯一的区别是nginx运行在docker容器中。 只是想知道为什么容器一有这么差的性能 nginx.conf:
Docker教程经常说我可以运行更多容器,以提高我的webapp的可用性。然而,这是一个非常宽泛的声明,并没有解释在不同的情况下应该运行多少个容器。我如何知道我是否需要1、5、10、100或1000个容器实例? 示例-我只有一台服务器,正在使用docker运行nginx和php fpm。每个容器一个。有了这个简单的设置,我的webapp就可以正常工作,而且看起来很灵敏。(在同一台服务器上)增加额外
我有以下Dockerfile: 以及以下docker-compose.yml: 如果我通过docker cmd以以下方式手动运行Dockerfile: 看起来一切正常,我得到了它实际执行的应用程序输出日志: 但是,当我试图通过docker-comment以以下方式执行我的应用程序时: 我的应用程序似乎启动正常,但无法继续执行。以下是输出: 我尝试执行show logs命令: 但我得到的唯一记录是第
docker错误: PS C:\Windows\System32>docker运行测试错误:出现JNI错误,请检查线程“main”java.lang.noClassDeffounderRorr:javax/JMSException在java.lang.Class.GetDeclaredMethods0(本机方法)在java.lang.Class.GetDeclaredMethods(class.j
我一直在使用localstack开发一个针对Local的服务。我刚刚通过运行了他们的docker映像