与docker和高山使用内存映射文件

我们有一个最近被移植到docker的java应用程序。 此应用程序使用内存映射文件。 我们观察到在进行这种改变时性能下降很大,我们正在努力确切地诊断这种情况发生的原因。

我们之前的设置包括使用CentOS 6.8,Java 8以及存储在与应用程序运行相同的文件系统中的文件。 我们的新设置包括Docker 17.03,CentOS 7.4, openjdk:8u131-alpine ,并将容器挂载到只读的容器,并保存用于内存映射文件的文件。

通过使用iostat我们已经看到docker解决scheme中的tps与非docker解决scheme相比是多次的。 我们不确定是否因为操作系统更频繁地将部分文件加载到内存中。 使用YourkitVisualVM我们可以意识到Yourkit解决scheme中存在一些内存问题,经过一段时间后,应用程序内存不足。 这可能是因为一些资源正在其他地方使用,应用程序无法正确处理所有传入的负载。

另外,我们还想了解内存映射文件是使用容器内还是容器外的内存,因为依赖我们会为容器本身保留更多或更less的内存。

此外,任何build议,以更好地了解这个问题的根源是什么,可以被赞赏。