我将PlayFramework 2.6与Docker一起使用。我使用sbt:dockerPublish
构建并发布图像,然后使用Ansible将其部署到Amazon EC2实例。
我想获得强大的生产实例,我的问题是:
我是否需要更改docker的配置并播放才能获得最佳性能?
我想要4个CPU内核和16 GB RAM的实例。在没有交换的情况下在普通Ubuntu上使用1GB内存运行Play之前我遇到了问题,我是否会遇到与Docker相同的内存问题,即使有16GB?
答案 0 :(得分:1)
我不熟悉快速网络搜索之外的PlayFramework,我只是看到它是一个Java MVC的东西,但默认情况下Docker容器会耗尽尽可能多的内存和计算量。在这种情况下,这似乎是件好事,你担心Docker保守而不使用更大的EC2实例。
您可以对容器内存使用情况设置硬限制或软限制:https://docs.docker.com/engine/admin/resource_constraints/#limit-a-containers-access-to-memory
在您的实例ssh上运行容器并运行docker stats
后,您就可以跟踪容器的资源使用情况。
答案 1 :(得分:1)
<强>内存强>
操作系统需要一些内存 - 比如100MB。在Java VM内部,你需要一些基本的内存,比如说32MB。 VM中的其余内存将取决于您的应用程序:并发用户数量,内存密集程度,优化程度。
如果你的机器/ VM /容器有1GB的RAM,那么使用Java的-Xmx768M
选项将Java VM最大堆大小设置为小于此值,这样就不会导致你的机器交换。
<强> CPU 强>
Play默认使用所有核心。如果需要,您可以进一步调整它。配置记录在此处:
https://www.playframework.com/documentation/2.6.x/ThreadPools#Configuring-the-default-thread-pool