当前位置: 首页 > news >正文

(k8s中)docker netty OOM问题记录

1、首先查看docker的内存占用情况:

docker top 容器名 -u 查看内存cpu占用率(容器名来自kubectl describe pod xxx或者docker ps)
在这里插入图片描述
可以看出内存一直增长,作为IO代理这是不正常的。

2、修改启动参数和配置文件

需要注意的是为了安全考虑,docker默认是不能使用一些调试手段的,需要修改启动参数和yaml
docker file中增加启动参数(yaml中应该也可以):

ENTRYPOINT ["java", "-jar", "/usr/local/bin/access-1.0-SNAPSHOT.jar", "-XX:NativeMemoryTracking=detail"]

yaml增加:

apiVersion: apps/v1
kind: Deployment
.......
spec:........template:........spec:      containers:- name: access.........          securityContext:capabilities:add: ["SYS_PTRACE"]

3、查看具体内存占用

各类内存增长情况:

#建立内存基线
jcmd 1 VM.native_memory baseline
#与基线对比
jcmd 1 VM.native_memory summary.diff

其中1是pid,可以通过jps查看

查看当前内存具体申请源:

jcmd 1 VM.native_memory detail scale=MB  

查看结果是Other的内存增长比较明显:

[0x00007f76b2143b77] Unsafe_AllocateMemory0+0x87
[0x00007f769577c4ba](malloc=732MB type=Other #228)

Unsafe_AllocateMemory0一般是ByteBuf申请的内存,jvm不管理,也就是不会gc,需要自己关注申请和释放

4、自己申请的ByteBuf

自己申请的ByteBuf要么往下传递(通过ctx write或者fire read)由后面的pipe节点释放,要么自己通过release释放。
如果是写入服务器response中的content,通过ctx.writeAndFlush往下传递,由netty去管就行了。

5、在pipe的handle中收到的msg

比如服务器上收到的request,如果不是最后一个节点,则必须显式传递:ctx.fireChannelRead(msg);
如果是最后一个节点则自己手动释放,可以content.release也可以ReferenceCountUtil.release(msg);
也可以继承SimpleChannelInboundHandler,SimpleChannelInboundHandler中会释放,不用自己释放了。
如果是服务器处理一个请求回复一个响应,一般是作为最后一个节点,可以继承SimpleChannelInboundHandler。

相关文章:

  • 高光谱遥感学习入门丨高光谱数据处理基础、Python和Matlab高光谱遥感数据处理
  • Neo4j aura 官方网站快速入门新手教精读-从官方教程学习知识图谱
  • 华为OD技术面试案例5-2024年
  • 阿里云启动实例进入了急救模式解决办法
  • 设计模式:模版模式
  • TensorBoard的使用
  • 市场需求预测模型
  • swift -- 系统语音识别(转文字)
  • 什么是双线服务器?
  • unity后期
  • 基于SSM SpringBoot vue服装物流管理系统
  • matplotlib.animation 3d姿态动画
  • 第十一届蓝桥杯省赛第一场C++ B组《整除序列》(c++)
  • NLP(一)——概述
  • 《HelloGitHub》第 95 期
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [Vue CLI 3] 配置解析之 css.extract
  • 《Java编程思想》读书笔记-对象导论
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【剑指offer】让抽象问题具体化
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 3.7、@ResponseBody 和 @RestController
  • input的行数自动增减
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Laravel5.4 Queues队列学习
  • Less 日常用法
  • PermissionScope Swift4 兼容问题
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 关于for循环的简单归纳
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 设计模式走一遍---观察者模式
  • 深度学习中的信息论知识详解
  • 自动记录MySQL慢查询快照脚本
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #Linux(make工具和makefile文件以及makefile语法)
  • (独孤九剑)--文件系统
  • (五)c52学习之旅-静态数码管
  • .cn根服务器被攻击之后
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net的socket示例
  • .net连接oracle数据库
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /etc/fstab 只读无法修改的解决办法
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [2669]2-2 Time类的定义
  • [Android] Upload package to device fails #2720
  • [APIO2012] 派遣 dispatching
  • [Codeforces] number theory (R1600) Part.11
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [HCIE] IPSec-VPN (手工模式)
  • [LeetCode 127] - 单词梯(Word Ladder)
  • [LeetCode] NO. 387 First Unique Character in a String