docker可用容量查看(docker 查看jvm内存占用方式)
docker可用容量查看
docker 查看jvm内存占用方式一、进入docker容器的宿主机,查看运行指定镜像的容器id(结果的第一列):docker ps | grep myImageName(或docker ps | grep java)
docker exec -it containerId sh
top
可看到基本的容器占用的信息:pid、vsz、cpu、command等。(ctrl+c 或 q,退出top)
四、查看更具体的jvm内存占用:top -m
其中,vsz:Virtual Memory Size,虚拟内存大小,表明了该进程可以访问的所有内存,包括被交换的内存和共享库内存。
rss: Resident Set Size,常驻内存集合大小,表示进程在RAM中占用了多少内存,并不包含在SWAP中占用的虚拟内存。即使是在内存中的使用了共享库的内存大小也一并计算在内,包含了完整的在stack和heap中的内存。
SHR:shared memory,共享内存。
补充:
ps -ef | grep java 或 docker top 容器id ,可查看pid的一些信息。
ps aux | grep java。
top -p pid。
RSS
是常驻内存集(Resident Set Size),表示该进程分配的内存大小。
RSS
不包括进入交换分区的内存。
RSS
包括共享库占用的内存(只要共享库在内存中)
RSS
包括所有分配的栈内存和堆内存。
VSZ
表示进程分配的虚拟内存。
VSZ
包括进程可以访问的所有内存,包括进入交换分区的内容,以及共享库占用的内存。
VSZRW:未百度到具体含义,猜测:初始申请的虚拟内存大小。
docker stats 容器名 或 docker stats 容器id,结果如下:
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
补充:docker容器化下的JVM参数调优
1、JVM堆内存设置跑在docker容器的Java服务发生过几次内存超标异常,实际上这和Java程序的docker容器化有很大的关系。Java和docker并不是天然的朋友,docker可以设置内存和CPU限制,底层通过Linux cgroup技术实现,但是Java JVM并不能自动检测到。
我们可以使用Java的Xmx标识手动指定堆内存的大小或者使用较高版本的JDK提供的JVM标识,解决这个问题。
问题:
旧版本Java8(update 131之前的版本),JVM的可用内存和CPU数量并不是docker允许你使用的可用内存和CPU数量
比如docker容器中限制只能使用1G,但是旧版本Java并不能识别到这个限制,当业务增长时,JVM就会申请更多内存,可能远超这个限制。但是如果使用太多内存,docker就会采取行动并杀死容器内的Java进程,显然这不是我们想要的!
目前我们生产环境使用Java8版本,这个问题可通过-Xmx限制堆内存大小来解决,不过这里实际限制了两次,一次是docker容器的内存限制,一次是jvm堆内存的限制。
解决方法:
这个前提需要Java程序的dockerfile支持:
# 初始镜像 FROM adoptopenjdk/openjdk8 # jar包名字需要更改为项目名字-版本号,后面app.jar 不变 ADD example-sun-1.0.jar app.jar # 配置JVM启动参数 ENV JVM_ARGS=${JVM_ARGS} EXPOSE 8080 # 优化jvm参数配置启动 ENTRYPOINT java ${JVM_ARGS} -Djava.security.egd=file:/dev/./urandom -jar app.jar
具体在k8s deployment.yaml 部署文件中环境变量 env 中加入以下参数,当JVM 启动时就会加载进去
- name: JVM_ARGS value: -Xmx1024m -Xms512m
Xmx1024m #设置jvm堆内存的最大值
-Xms512m #设置jvm堆内存的最小值
这里设置最小堆内存为512m,最大内存为1024m, 堆内存调整不要一味简单增大,要仔细分析内存占用过大的原因,是否有代码上的问题。
较高版本Java9之后(8u131+)JVM提供更好的解决方式
使用JVM 标志: -XX:+UnlockExperimentalVMOptions-XX:+UseCGroupMemoryLimitForHeap
强制JVM检查Linux的cgoup配置,实际上docker正是通过Linux的cgroup技术来限制容器的内存等资源的。现在如果应用达到了docker设置的限制(比如1G),JVM是可以看到这个限制的,JVM就会尝试GC操作。
如果gc之后仍然超过内存限制,那JVM就会做它该做的事情,比如抛出OutOfMemoryException.也就是说,JVM能够识别到docker的这些设置。
2、GC日志打印以及OOM自动dump程序运行过程中,也可以打印GC日志,方便排查问题, 同时当Java发生OutOfMemory 异常时可将heap 内存 dump 下来方便我们排查问题使用,设置以下参数:
- name: JVM_ARGS value: -Xmx1536m -Xms512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/my-heap-dump.hprof -Xloggc:/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps
参数含义:
# 发生内存溢出自动dump内存文件 -XX:+HeapDumpOnOutOfMemoryError ############ 指定dump文件地址为服务打印日志文件夹/logs(已挂载) -XX:HeapDumpPath=/logs/my-heap-dump.hprof ############ 打印服务gc日志 -Xloggc:/logs/gc.log # 输出详细GC日志 -XX:+PrintGCDetails # 格式化输出时间戳 2020-09-17T19:45:05.680+0800 -XX:+PrintGCDateStamps
以上为个人经验,希望能给大家一个参考,也希望大家多多支持开心学习网。如有错误或未考虑完全的地方,望不吝赐教。
- 如何删除docker中已停止的容器(一条命令重启所有已停止的docker容器操作)
- docker默认网络模式(Docker 网络模式及配置方式)
- docker快速配置redis集群(基于docker搭建redis集群的方法)
- docker 镜像导入导出(Docker镜像的导入导出代码实例)
- docker nginx 配置详解(Docker 如何安装 Nginx)
- docker 查看目录映射(docker 文件存放路径, 修改端口映射操作方式)
- Docker 运行多个Springboot的详细教程(Docker 运行多个Springboot的详细教程)
- 在windows安装docker详细步骤(Docker 部署 Prometheus的安装详细教程)
- docker实战部署(使用docker搭建一套开发环境全家桶的详细教程)
- docker容器使用流程(在Docker构建的容器中实现安装ping工具)
- docker怎么用端口连接容器(使用docker更改容器内root密码的操作)
- docker目录映射不起作用(关于dockerfile build过程中报/bin/sh: pip: command not found的解决方法)
- docker停止删除所有容器方法(Docker stop停止/remove删除所有容器)
- docker指令详解(docker create命令的用法说明)
- mysql允许远程访问docker(Docker部署mysql远程连接 解决2003的问题)
- docker镜像怎么用(Docker和镜像的操作方法)
- 以前全椒人是怎么过冬的 满满都是回忆(以前全椒人是怎么过冬的)
- NVIDIA显卡份额冲上88 A饭发愁 游戏优化恐没A卡份了(NVIDIA显卡份额冲上88A饭发愁)
- AMD YES A卡还是N卡 A卡和N卡的区别(AMDYESA卡还是N卡)
- 以后显卡多了一个新选择,N卡和A卡外又多了个I卡(以后显卡多了一个新选择)
- 读卖乐园的彩灯(读卖乐园的彩灯)
- 新疆80后在淘宝卖干果 以前是 不务正业 如今帮乡亲致富(新疆80后在淘宝卖干果)
热门推荐
- xampp二次安装方法(xampp中apache在windows7下无法启动的解决方法)
- js打印斐波那契数列(JavaScript输出斐波那契数列的实现方法)
- uniapp使用vue写页面(分析uniapp入门之nvue爬坑记)
- python爬虫入门自学(自学python爬虫的建议和周期预算)
- navicat15.0.28注册码(Navicat for MySQL 11注册码激活码汇总)
- SqlServer2016模糊匹配的三种方式及效率问题简析(SqlServer2016模糊匹配的三种方式及效率问题简析)
- zabbix基本监控配置(zabbix使用教程+受监控服务器的添加安装教程)
- Windows系统 VPS/云服务器远程3389管理连接(Windows系统 VPS/云服务器远程3389管理连接)
- iis服务器的配置(win7下配置使用IIS搭建自己的WEB服务器)
- ftp主动模式和被动模式设置(FTP主动模式和被动模式区别详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9