portainer 官网提供版本 293
>本文主要针对docker来部署java程序的时候,常常会出现内存占有很大的问题,通过调整docker的配置来限制内存占用
测试环境下服务器的配置为24核64G内存,启动微服务,在没有进行内存限制的时候,我们通过 docker stats 命令查看一下微服务的内存占用,如下图
我们看一下Dockerfile文件的配置
对应的启动脚本 startsh 的配置如下:
我们再看一下docker-compose的配置
配置中都没有对docker内存以及jvm内存做任何限制,导致了我们docker容器启动,占用内存过大的问题
首先我们对java启动时jvm内存大小做个调整,增加jvm启动参数 -Xms1024M -Xmx1024M -Xmn256M -Xss256K
调整后的启动脚本 startsh 如下:
调整完jvm启动参数之后,重新启动容器,结果如下:
发现内存使用上已经根据我们调整的大小降了下来
到这里,问题基本解决,不过看到容器的内存限制还是62G,这样显然还是不合理的,我们也要对容器进行调整,调整方式有两种
直接指定容器最多使用 200M 物理内存和 200M swap。
其中mem_limit用于控制容器默认启动时会使用 1/16物理内存的现象,导致几个服就占满了全部内存。
v3版本中,配置如下:
注意 deploy 仅 docker deploy stack 生效
或使用 docker-compose --compatibility up 生效
配置完成之后,重启docker服务,如下图:
容器内存限制发生了变化,达到了我们的预期效果
1 JVM常用启动参数
2 如何限制docker容器的内存大小
3 在Docker Compose file 3下限制CPU与内存宝塔面板是一款简单好用的服务器运维面板,简单说来就是一个可视化的面板管理工具,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。出错少而且安全,由于宝塔面板既有windows版本也有linux版本,尤其是Linux服务器很多用户不会 *** 作,宝塔是为了让那些不会linux的人使用的。使用宝塔, *** 作linux更简单,更方便,这里要提醒一下虽然宝塔面板可以安装在物理服务器或者云服务器,虚拟主机无法安装的,但是云服务器基本都是可以安装的。
既然美国服务器在安装宝塔面板的时候选择什么样的更好呢?
好马还要配好鞍,宝塔面板功能强劲,但是还需要服务器本身的硬件条件稳定性,那么租用美国服务器能够选择可靠的机房呢,以下有几个标准可以参考
现在在租用选美国服务器的时候建议选择能够24小时在线运维服务的专业服务团队,尤其是那些能够提供中文客服的专业全天候运维团队,此外由于美国服务器的硬件配置性价比高,所以价格上是比较优惠,建议选择机房服务商的时候选择那些能够支持定制化配置升级的机房,例如raid架构和多服务器的负载均衡
美国服务器过去经常由于到中国大陆地区的延迟高而饱受诟病,但是现在有实力的专业机房都支持中美CN2直连线路,降低了超过40%的网络延时,部署宝塔面板同步升级更快,搭建网站稳定性更强
一种方案为Haproxy+etcd+confd,采用松散式的组织结构,但各个组件之间的通讯是非常严密的,且扩展性更强,定制也更加灵活。
一、架构优势
约定由Haproxy+etcd+confd+Docker构建的基础服务平台简称“HECD” 架构,整合了多种开源组件,看似松散的结构,事实上已经是一个有机的整体,它们互相联系、互相作用,是Docker生态圈中最理想的组合之一,具有以下优势:
自动、实时发现及无感知服务刷新;
支持任意多台Docker主宿机;
支持多种APP接入且打散至不分主宿机;
采用Etcd存储信息,集群支持可靠性高;
采用Confd配置引擎,支持各类接入层,如Nginx;
支持负载均衡、故障迁移;
具备资源d性,伸缩自如(通过生成、销毁容器实现);
二、架构说明在HECD架构中,首先管理员 *** 作Docker Client,除了提交容器(Container)启动与停止指令外,还通过REST-API方式向Etcd(K/V)存储组件注册容器信息,包括容器名称、主宿机IP、映射端口等。Confd配置组件会定时查询Etcd组件获取最新的容器信息,根据定义好的配置模板生成Haproxy配置文件Haproxycfg,并且自动reload haproxy服务。用户在访问业务服务时,完全没有感知后端APP的上线、下线、切换及迁移,达到了自动发现、高可用的目的。详细架构图见图1-1。
图1-1 平台架构图
为了方便大家理解各组件间的关系,通过图1-2进行架构流程梳理,首先管理员通过Shell或API *** 作容器,下一步将容器信息注册到Etcd组件,Confd组件会定时查询Etcd,获取已经注册到Etcd中容器信息,最后通过Confd的模板引擎生成Haproxy配置,整个流程结束。
图1-2架构流程图
了解架构流程后,我们逐一对流程中各组件进行详细介绍。
1、Etcd介绍
Etcd是一个高可用的 Key/Value 存储系统,主要用于分享配置和服务发现。
简单:支持 curl 方式的用户 API (>
安全:可选 SSL 客户端证书认证
快速:单实例可达每秒 1000 次写 *** 作
可靠:使用 Raft 实现分布式
2、Confd介绍
Confd是一个轻量级的配置管理工具。通过查询Etcd,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。
3、Haproxy介绍
HAProxy是提供高可用性、负载均衡以及基于TCP和>
平台环境基于Centos65+Docker12构建,其中Etcd的版本为etcd version 050-alpha,Confd版本为confd 062,Haproxy版本为HA-Proxy version 1424。下面对平台的运行环境、安装部署、组件说明等进行详细说明,环境设备角色表如下:
1、组件安装
11 Docker安装
SSH终端登录192168122服务器,执行以下命令:
# yum -y install docker-io# service docker start
# chkconfig docker on
12 Haproxy、confd安装
SSH终端登录192168120服务器,执行以下命令:
1、haproxy# yum –y install haproxy
2、confd
# wget
# mv confd /usr/local/bin/confd
# chmod +x /usr/local/bin/confd
# /usr/local/bin/confd -version
confd 062
13 Etcd安装
SSH终端登录192168121服务器,执行以下命令:
# mkdir -p /home/install && cd /home/install
# git clone
# cd etcd
# /build
# cp bin/etcd /bin/etcd
# /bin/etcd -version
etcd version 050-alpha 2、组件配置
21 Etcd配置
由于etcd是一个轻量级的K/V存储平台,启动时指定相关参数即可,无需配置。
# /bin/etcd -peer-addr 192168121:7001 -addr 192168121:4001 -data-dir /data/etcd -peer-bind-addr 0000:7001 -bind-addr 0000:4001 &由于etcd具备多机支持,参数“-peer-addr”指定与其它节点通讯的地址;参数“-addr”指定服务监听地址;参数“-data-dir”为指定数据存储目录。
由于etcd是通过REST-API方式进行交互,常见 *** 作如下:
1) 设置(set) key *** 作
{"action":"set","node":{"key":"/mykey","value":"this is awesome","modifiedIndex":28,"createdIndex":28}} 2) 获取(get) key信息# curl -L
{"action":"get","node":{"key":"/mykey","value":"this is awesome","modifiedIndex":28,"createdIndex":28}}
3) 删除key信息
# curl -L 。22 Confd+Haproxy配置
由于Haproxy的配置文件是由Confd组件生成,要求Confd务必要与haproxy安装在同一台主机上,Confd的配置有两种,一种为Confd资源配置文件,默认路径为“/etc/confd/confd”目录,另一种为配置模板文件,默认路径为“/etc/confd/templates”。具体配置如下:
创建配置文件目录
# mkdir -p /etc/confd/{confd,templates}(1)配置资源文件
详细见以下配置文件,其中“src”为指定模板文件名称(默认到路径/etc/confd/templates中查找);“dest”指定生成的Haproxy配置文件路径;“keys”指定关联Etcd中key的URI列表;“reload_cmd”指定服务重载的命令,本例中配置成haproxy的reload命令。
/etc/confd/confd/ haproxytoml
src = "haproxycfgtmpl"
dest = "/etc/haproxy/haproxycfg"
keys = [
"/app/servers",
]
reload_cmd = "/etc/initd/haproxy reload"
(2)配置模板文件
Confd模板引擎采用了Go语言的文本模板,更多见>
/etc/confd/templates/haproxycfgtmpl
log 127001 local3
maxconn 5000
uid 99
gid 99
daemon
defaults
log 127001 local3
mode >
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)