跑的好好的 Java 进程,怎么突然就瘫痪了

  • 时间:
  • 浏览:0

每台服务器处于的环境是不一样的

设置了正确的限流阀值,也将会被摸死

阿里有结合算法动态调整单机限流阀的产品,将会对外宣告了,感兴趣的同学还能能 搜一下淘系技术公众号中的 诺亚自适应限流 的相关内容。

或多或少服务器和离线计算的 vm 混部在共同,或多或少部署在实体机,或多或少部署在新老型号的机器上,每台服务器能承受的 qps 并非全部一样。统一配置分布式系统中每台服务器限流阀值,要么发挥这样每台服务器应有的作用,要么在高 qps 的情况表下或多或少真难的服务器宕机,可是我 用服务器作为限流粒度是最离米 的。

当单机承受的 QPS 6~20 倍于限流的流量时,拒绝一次请求的开销就无法忽略不记了。譬如春晚活动或多或少系统设置了正确的限流也被 6~20 倍于限流的流量冲垮。一种生活生活死法称为被摸死。应对一种生活生活情况表,大家还能能 做的是在受到 6~20 倍的大流量时,动态减少限流的阀值。比如系统最可是我开始接受 11150qps ,11500 的拒绝流量过来会把系统摸死,一种生活生活可是我大家调整系统的阀值,限流设置到 1150 ,被摸死的阀值就还能能 高或多或少,这样 就算有 15000 个请求进来,大家系统也还能能 保证活下来。

为了了解大家的系统为哪此会不停 FGC ,大家不需要 先了解一下系统哪此情况表下会 GC 。在 Jvm 层面,当大家 new 另有2个对象的可是我, Jvm 会先在堆区分配对象不需要 的内存,一种生活生活可是我将会内存欠缺励志的话 ,就不需要 GC 了, GC 的返回结果可是我对象的空间地址。Jvm 会先进行 ygc ,也可是我大家通常说的标记qq克隆好友 ,将会 ygc 可是我依然申请这样空间,就会进行 FGC 了。同理,将会 FGC 可是我依然这样足够的空间,就会循环的进行 FGC ,直到申请到足够的空间。

内存泄漏产生的是导致 以及处置措施网上有可是我 资料,这里就不写了。内存泄漏造成系统瘫痪的频率很高,或多或少系统定时从数据库拉取配置信息缓存到集合中,可是我 set 不小心写成了 list ,最终在新增元素的可是我内存溢出了。养成良好的编程习惯,多关注些细节,就能处置可是我 未知的大问题。

大家盯系统监控的可是我通常会关注 99 分位的数据,但将会设置了合理的限流,系统依然被流量打挂,就要从那百分之一的长尾数据入手了。或多或少长尾数据对系统的影响会非常大。想象将会另有2个 put 请求传过来几十兆的数据,对 Java 是极为不友好的,很有将会产生 FGC ,让请求比较慢,是导致 一系列大问题。

如上文所讲, FGC 有将会处于在你的每一行代码。将会 FGC 可是我依然这样足够的空间,就会不停的 FGC ,直到申请到足够的空间。共同 JVM 会限制在抛出 OutOfMemory 错误可是我在 GC 中花费的 VM 时间的比例。系统频繁 F 大致一种生活生活生活情况表:

作者信息:通木, Github 账号 zhdd99 ,阿里巴巴基础设施事业部高级开发工程师,目前主要负责阿里巴巴IDC监控系统。

每台服务器就有并行处置请求的上限,不管请求处置的多快,超过上限可是我就会被撑死,对高并发的请求做好并发数限制是保持系统稳定的必要条件。不需要 注意的是,有或多或少系统在拒绝过多的请求时,也会做或多或少降级逻辑,降级逻辑也是有性能开销的,同样不需要 做并发限制,将会降级的请求超过并发限制,将不进行降级逻辑直接抛出异常。

总之,磨刀不误砍柴工,当大家的系统将会 FGC 一次又一次重启的可是我,不如花时间了解下系统产生性能大问题的是导致 ,将产生大问题的那根针拔掉,晚上睡个安稳觉,白天更加充满活力的挖新坑。希望每个系统任务管理器员手里也另有2个稳定的系统。

用 Java 无法做出类事 Redis 这样 的产品。Java 的内存回收机制使大家在编写代码时不需要需要 关注对象的回收,共同加大了内存回收的消耗,标记qq克隆好友 不需要 做内存拷贝,标记清除算法则不需要 stop the world 。可是我 大家在使用缓存的可是我,量稍微大或多或少就不需要 借助类事 Redis 这样 的中间件帮大家处置了。作为 Javaer ,大家享受了自动内存回收的安逸,共同可是我需要 多了解下内存优化的措施。

大家不需要 自适应限流另有2个是导致 :

在另有2个高并发的系统中,多数 FGC 是请求处置比较慢是导致 的。假设单机承受 tps 是1w,正常情况表下处置另有2个请求的时间是 1ms ,那同一时刻并行的请求数量仅为 10 。将会性能处于抖动,每个请求处置的时间增加到 1150ms ,那同一时刻并行的请求数量就会增加到 1150 个。每个系统任务管理器在处置请求的可是我就有 new 或多或少对象出来,长时间存活的系统任务管理器会造成类事内存泄漏的效果,将系统的内存耗尽。共同 FGC 也会加剧系统性能的开销,使系统变得比较慢,产生雪崩。