Play框架和Docker生产configuration

我使用Docker的PlayFramework 2.6。 我使用sbt:dockerPublish构build和发布映像,然后使用Ansible将其部署到Amazon EC2实例。 我想获得强大的生产实例,我的问题是:

我是否需要更改Docker的configuration并播放以获得最佳性能

我想要有4个CPU核心和16 GB RAM的实例。 我有问题,在没有交换的1GB内存的普通Ubuntu上运行,我会遇到与Docker相同的内存问题,甚至会有16GB?

我不熟悉快速网页search之外的PlayFramework,我只是看到它是一个Java MVC的东西,但是默认情况下,Docker容器将使用尽可能多的内存和计算。 在这种情况下,这似乎是一件好事,您担心Docker会保守,而不会使用更大的EC2实例。

可以对容器内存使用进行硬性或软性限制: https : //docs.docker.com/engine/admin/resource_constraints/#limit-a-containers-access-to-memory

一旦你在你的实例ssh中运行容器并运行docker stats ,并且你可以跟踪容器的资源使用情况。

记忆

你需要一些操作系统的内存,比如100MB。 在Java VM内部,你需要一些基本的Play-say 32MB内存。 虚拟机内的其余内存将取决于您的应用程序:同时有多less用户,其工作内存密度如何,优化了多less。

如果您的机器/虚拟机/容器具有1GB的RAM,则使用Java的-Xmx768M选项将Java VM最大堆大小设置为小于此-Xmx768M以便不会导致机器交换。

中央处理器

Play旨在默认使用所有核心。 如果需要,您可以进一步调整。 configurationlogging在这里:

https://www.playframework.com/documentation/2.6.x/ThreadPools#Configuring-the-default-thread-pool