与docker和高山使用内存映射文件
我们有一个最近被移植到docker的java应用程序。 此应用程序使用内存映射文件。 我们观察到在进行这种改变时性能下降很大,我们正在努力确切地诊断这种情况发生的原因。
我们之前的设置包括使用CentOS 6.8,Java 8以及存储在与应用程序运行相同的文件系统中的文件。 我们的新设置包括Docker 17.03,CentOS 7.4, openjdk:8u131-alpine
,并将容器挂载到只读的容器,并保存用于内存映射文件的文件。
通过使用iostat
我们已经看到docker解决scheme中的tps
与非docker解决scheme相比是多次的。 我们不确定是否因为操作系统更频繁地将部分文件加载到内存中。 使用Yourkit
和VisualVM
我们可以意识到Yourkit
解决scheme中存在一些内存问题,经过一段时间后,应用程序内存不足。 这可能是因为一些资源正在其他地方使用,应用程序无法正确处理所有传入的负载。
另外,我们还想了解内存映射文件是使用容器内还是容器外的内存,因为依赖我们会为容器本身保留更多或更less的内存。
此外,任何build议,以更好地了解这个问题的根源是什么,可以被赞赏。