单机限流-江河计划

单机限流(限流算法及隔离策略视频

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.5.2 低入侵限流框架设计与实现视频
在这里插入图片描述
在这里插入图片描述
代码:
在这里插入图片描述

【技术分享】OOM问题解决与优化回放6月28日 20:00—22:00

JVM调优方向: 内存、CPU资源

1.内存大小 (经验:70%~80%)

最大 == 最小
-XX:+AlwaysPreTouch 启动时候让操作系统 真正分配给JVM
性能测试 – 预热

2.内存使用和回收

内存 = 二进制数组 = INT = 4byte = 32bit
[00000000 00000000 00000000 00000000]
GC-->STW【JVM角度理解】-->GC线程--我们的JVM用户线程有暂停
运行时数据区 -【线程栈(方法栈针,本地变量表)-堆】

优化--->**减少GC次数!!!**--- 【新生代eden没空间、老年代满了】--
主要参数:ParallelGC、G1
【单次最大STW时间】-XX:MaxGCPauseMillis=

在这里插入图片描述

减少GC的STW耗时--比较困难--JVM研发去做---垃圾回收器 选型

3.逃逸分析 && 栈上分配

逃逸分析(-XX:-DoEscapeAnalysis)不生效时:655毫秒
                                                                生效时:10毫秒

逃逸分析:多线程下,变量是否可以被其他线程用
对象创建:
1.堆stack --> 多线程环境下,线程去创建对象时,怎么能保证JVM创建的对象在堆内存地址不冲突?
[TLAB]thread local allocation buffer:每个线程,都可以自己分配堆空间
2.线程栈【线程独享】

逃逸分析失效
1.如果返回的VO对象中,包含ArrayList。失效!因为JVM不清楚ArrayList需要占用多少内存
2…需要百度
优化点:创建对象 占用内存–线程栈–注意:对象里边能不能分配到栈上(对象有动态调整大小的集合是,不会进行栈上分配)
在这里插入图片描述

4.防止GC产生 高并发、低延迟(不同维度)

新生代GC 回收范围比较小—>减少FullGC
案例:
网易---->云课堂后端运营系统---->监控系统---->时不时出现大量FullGC
代码:
在这里插入图片描述
jxl处理execl
在这里插入图片描述
***哪里触发?***–>代码 预防 system.gc显示调用

如何定位–open jdk 工具 Btrace
在这里插入图片描述
1.btrace工具
2.编写脚本
在这里插入图片描述

3.执行脚本 监测
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
搞定!

5.堆外内存

1.堆外-XX:MaxDirectMemorySize 和元数据空间 无关(虽然都会放在堆外)
日志太少,很难分析
代码实例:
在这里插入图片描述

OOM分析、处理

在这里插入图片描述

1.【最常见最需要预防】java.lang.OutOfMemoryError: Java heap spacd

场景:【堆空间放大石头,放不下】

在这里插入图片描述

内存泄漏—导致内存溢出的原因
生产环境必须配置
-XX:+HeapDump0nOutOfMemoryError
-XX:HeapDumpPath=/temp.2020.hprof
【定位】–>根据大对象 -->找到GC引用关系【GCRoot】–> 找到存储的容器集合【线程】

定位方法:
在这里插入图片描述
在这里插入图片描述

2.java.lang.OutOfMemoryError: GC overhead limit exceeded

场景:【堆空间放沙子,放不进,导致GC,但是GC效率低,就抛出】
当GC花费了程序运行总时间的98%以上,而回收不到2%的堆,则抛出该异常。
在这里插入图片描述

3.java.lang.OutOfMemoryError: Metaspace

场景:【热加载,JAR包很多】
元数据空间class信息–>报错调大,如果是动态创建类,注意不需要的类有没有卸载掉。
在这里插入图片描述

4.java.lang.OutOfMemoryError; unable to create new native thread

线程 也是操作系统的资源
JAVA —>JVM---->OS---->创建本地线程(内存、进程线程的数量限制)
不同的操作系统,不同的表现
在这里插入图片描述
在这里插入图片描述

5.java.lang.OutOfMemoryError. Requested array size exceeds VM limit

超过数组的最大长度限制
在这里插入图片描述

6.java.lang OutOfMemoryerror: Direc buffer memory

堆外-XX:MaxDirectMemorySize 和元数据空间
在这里插入图片描述
在这里插入图片描述
【结合业务场景定位:文件操作网络操作
1.找到谁在用对外内存–btrace工具 跟踪 ByteBuffer.allocateDirect
2.具体的占用情况【spring解析jar包、nio File、netty、tomcat…】泄露 慢慢的占满---->谁占用的比较多
默认JVM---->操作系统 内存分配 函数
谷歌有一个工具—>偷天换日 换掉 OS内存分配工具[gperftools]

7.Out of swap space

JAVA总内存大于可用物理内存
交换空间-操作系统 内存 交换到硬盘
在这里插入图片描述

8.操作系统OOM Killer

来自网易内部wiki记录 --考拉?严选?
如果发现JVM进程突然不见了,没有任何应用日志,请排查操作系统日志里边是否有 kill关键字
操作系统的保护机制,在操作系统内存申请的函数说明里面有写:*** man malloc***
liunx内存分配默认策略:
1.申请后不代表真正的分配,导致程序申请到的内存大于可用内存
2.当使用的时候,采取分配。如果出现不够用,选择一个或者多个进程kill
【重点】在哪里可以看见–这种情况会记录在操作系统日志 *** /var/log/messages***
在这里插入图片描述
导致OS kill java process在这里插入图片描述在这里插入图片描述

4.5.3 编写限流框架中的核心模块回放6月29日 20:00—22:00

【技术分享】CPU100%问题解决与优化回放

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值