dokcer部署java项目内存占用过高
问题:
当我在使用docker容器运行java项目时,部署了几个项目服务器的内存占用就非常高了,一开始以为是项目太大了,后来发现没那么简单,通过一下指令查看docker容器占用内存大小,发现确实不对劲。
docker stats
如图
其中每个容器的最大内存都是16G(宿主机的内存),翻阅资料发现,在不使用参数设置堆内存大小时会根据容器的大小来分配jvm的内存,我猜测可能这样就导致jvm分配的内存太大导致很难进行垃圾回收,导致内存占用过大(可能不是,敬请纠正),所以只需要限制容器的内存大小就可以解决了。
解决方案:
通过docker-compose文件设置参数:
version: '3.7'
services:
openldap:*******
image:
container_name: aaa
environment:
- N9E_NID=22
ports:
- "389:389"
- "636:636"
deploy:
resources:
limits:
cpus: "2.00"
memory: 5G
reservations:
memory: 200M
volumes:
- ./ldap:/var/lib/ldap
- ./slapd.d:/etc/ldap/slapd.d
restart: always
以上是网上的配置,可能由于docker版本的问题,在我的项目里不能使用,与是我找到了下面的版本。
version: '3.7'
services:
openldap:
image: 10.10.xxx.54/public/openldap:1.3.0
container_name: openldap
environment:
- N9E_NID=22
ports:
- "389:389"
- "636:636"
mem_limit: 200m
volumes:
- ./ldap:/var/lib/ldap
- ./slapd.d:/etc/ldap/slapd.d
restart: always
重新启动容器,使用docker stats查看。
成功设置容器最大内存。
使用docker stats查看。
[外链图片转存中…(img-5NHESLap-1666027990019)]
成功设置容器最大内存。