如何分配docker容器的系统资源

最近和阿里的一些同事聊到用Docker部署Java应用。其中一个常见的问题是如何在容器中设置JVM的内存限制。如果使用官方的Java映像或者基于Java映像的Docker映像,那么通过传递JAVA_OPTS环境变量就可以很容易地设置JVM的内存参数。例如,对于官方的tomcat映像,我们可以执行以下命令来启动一个最大内存为512M的Tomcat实例-RM-ejava _ opts = '-xmx 512M ' Tomcat:8在日志中,我们可以清楚地发现设置已经生效“命令行参数:-xmx 512M”02-apr-2016 12:46:26/Denver Dino/Tomcat它基于Docker的官方Tomcat镜像,它的启动脚本会检查CGroup中的内存限制,并计算JVM传递给Tomcat的最大堆大小。它的代码如下#!/bin/bash limit _ in _ bytes = $(cat/sys/fs/cgroup/memory/memory/Denver dino/Tomcat:8-auto heap传递以下命令。从日志中,我们可以检测到相应的JVM参数已经被设置为448 MB (512-64) docker日志测试...02-APR-2016 14:18:09.870信息[主]。org . Apache . catalina . startup . version logger listener . logcommandline argument:-xmx 448m...我们还可以方便地调整Java应用程序的内存。Docker 1.10提供了动态修改容器资源限制的能力。但是,因为JVM不能感知容器资源的修改,所以我们仍然需要重新启动tomcat来更改JVM的内存设置。例如,我们可以通过下面的命令将容器内存限制调整为1gb Docker Update-M 1024M Test Docker Restart Test再次检查日志。相应的最大JVM堆大小已被设置为960mb docker日志测试...信息[主]组织Apache . catalina . startup . version logger listener . log command line参数:。...