我们有一个最近已移植到docker的java应用程序。此应用程序使用内存映射文件。我们观察到在进行此更改时性能会出现巨大下降,我们正在尝试准确诊断出这种情况发生的原因。
我们之前的设置包括使用CentOS 6.8,java 8和存储在应用程序运行的同一文件系统中的文件。我们的新设置包括Docker 17.03,CentOS 7.4,openjdk:8u131-alpine
,并将卷安装到只读容器,并保存用于内存映射文件的文件。
使用iostat
我们已经看到,与非docker解决方案相比,docker解决方案中tps
多次。我们不确定这是否因为操作系统更频繁地将部分文件加载到内存中。使用Yourkit
和VisualVM
我们可以理解docker解决方案中存在一些内存问题,一段时间后,应用程序内存不足。这可能是因为某些资源正在其他地方使用,而应用程序无法正确处理所有传入的负载。
此外,我们还想了解内存映射文件是否使用容器内部或容器外部的内存,因为我们将为容器本身保留更多或更少的内存。
此外,任何有关如何更好地了解此问题的根本原因的建议均值得赞赏。