我有一个I/O密集型的java tomcat应用程序,我想在一个更现代的集群环境中执行htmlunit测试。因此,我还考虑了docker,它可以通过应用swarm等提供很酷的功能。
这些测试针对oracle数据库运行,并在本地I/O上创建流量。我只对一个问题感到好奇:
当我在资源有限的情况下使用产品的普通安装运行测试时(在一个单CPU系统上,load15因子高于2),测试执行时间比在相同环境(资源有限)下使用停靠的测试执行方法慢大约35%。如果有足够的资源将负载因子保持在1以下(在1个CPU的系统上),则普通安装和dockerized安装之间的运行时间几乎相同。
我在想办法解释这件事。它是关于覆盖文件系统缓存机制的吗?在调查这件事的时候,应该看哪里?
发布于 2016-07-25 16:44:29
这个答案是针对您的应用程序的,所以您所能做的就是测试各种docker存储设置。
首先,使用local data volume测试应用程序。local volume或mounting a local directory as a volume。这消除了大部分开销,并且应该尽可能接近主机IO速度。
如果你的应用程序全速运行,那么docker storage driver很可能是罪魁祸首,所以你可以尝试docker守护进程的替代选项,看看哪个效果最好。
在4.x之前的内核上,永远不要在循环模式下使用设备映射器!--storage-driver==devicemapper \ --storage-opt dm.loop*
--storage-driver==aufs
overlay。
--storage-driver==devicemapper \ --storage-opt dm.datadev=/dev/dockervg/datalv \ --storage-opt dm.metadatadev=/dev/dockervg/metadatalv这也需要一些lvm设置。
使用每个驱动程序进行测试。
您的容器数据将在每次交换时被销毁。
然后使用最好的驱动程序。
挂载本地卷可能是最快的,如果您选择这样做,那么您将处理存储在容器外部的数据。
https://stackoverflow.com/questions/38562378
复制相似问题