3

We have an java application that recently has been ported to docker. This application uses memory mapped files. We have observed a huge performance degradation when doing this change and we are trying to diagnose exactly why this happened.

Our previous setup consisted in using CentOS 6.8, java 8 and files stored in the same filesystem as the application was running. Our new setup consists of Docker 17.03, CentOS 7.4, openjdk:8u131-alpine and mounting a volume to the container that is read-only and holds the files used for memory mapped files.

By using iostat we have seen that the tps is multiple times in the docker solution compared to the non-docker solution. We are not sure if this because the OS is loading parts of the files into memory more often. Using Yourkit and VisualVM we could appreciate that there is some memory issues in the docker solution and after some time, the application runs out of memory. This is probably because some resources are being used somewhere else and the application cannot properly handle all the incoming load.

In addition, we would also like to understand if the memory mapped files use memory inside the container or outside the container since depending we will reserve more or less memory for the container itself.

Also, any suggestion to get a better insight on what the root cause of this issue could be is appreciated.

hveiga
  • 6,725
  • 7
  • 54
  • 78
  • I wouldn't use the Alpine version of the OpenJDK Docker image because of the MUSL libc library. Did you try the standard "latest" version? – Ricardo Branco Aug 22 '17 at 00:32
  • What's your host OS? If it's OS X getting good performance on the filesystem through the docker VM needs attention. – Joseph Sheedy Feb 26 '20 at 06:27

0 Answers0