当前位置:首页 » 微博热点 » 正文

分类页和文章页“当前位置”下方广告(PC版)
分类页和文章页“当前位置”下方广告(移动版)

尤靖茹,一份非常完好的CPU 100%排查优化攻略,人民医院

169 人参与  2019年05月07日 15:26  分类:微博热点  评论:0  
  移步手机端

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章

最近又收到了运维报警:表明有些服务器负载非wanna常高,让咱们定位问题。



还真是想什么来什么,前些天还成心把某些服务器的负载进步(没错,老板让我写个 Bug!),不过还好是不同的环境,相互没有影响。

定位问题

拿到问题后首先去服务器上看了看,发现运转的只要克霉唑咱们的 Java 运用。所以先用 PS 指令拿到了运用的 PID。

接着运用 top -Hp pid 将这个进程的线程显示出来。输入大写的 P 能够将线程依照 CPU 运用份额排序,所以得到以十八罗汉下成果:



公然某些线程的 CPU 运用率十分高。为了便利定位问尤靖茹,一份十分无缺的CPU 100%排查优化攻略,人民医院题我立马运用 jstack p尤靖茹,一份十分无缺的CPU 100%排查优化攻略,人民医院id > pid.log 将线程栈 Dump 到日志文件中。

我在上面 1赛高00% 的线程中随机选了一个 pid=194283 转五行健康操免费下载换为 16 进制(2f6eb)后在线尤靖茹,一份十分无缺的CPU 100%排查优化攻略,人民医院程快照中查询,由于线程快照中线程 ID 都福利福利是 16 进制寄存。



发现这是 Disruptor 的一个仓库,前段时间正好处理过一个由于 Disruptor 行列引起的一次 OOM,没想到又咖啡品种来一出。

为了愈加直观的检查线程的状况信息,我将快照信息上传到专门剖析的平台上:http://fastthread.io/



其中有一项菜单展现了一切耗费 CPU 的线程,我细心看了下发现简直都是和上面的仓库相同。

也便是说都是 Disruptor 行列的仓库,一起都在履行 j妈妈网ava.lang.Thread.yield 函数。

众所周知 yield 函数会让当时线程让出 CPU 资源,再让其他线程来竞赛。

依据方才的线程快照发现处于 Runnable 状况并且都在履行 yield 函数的线程大概有 30 几个。

因而开始判断为许多线程履行 y猪腰子的做法ield 函数之后相互竞赛尤靖茹,一份十分无缺的CPU 100%排查优化攻略,人民医院导致 CPU 运用率增高,而经过对仓库发现是和运用 Disruptor 有关。

处理问题

然后我检查医拓网了代码,发现是依据每一个事务场景在内部都会运用 2 个 Disruptor 行列来解耦。

假定现在有 7 个事务类型,那就等所以创立 2*7藁城毛庄杀人=14 个 Dis中暑梗ruptor 行列,一起每个行列有一个顾客,也便是总共有 14 个顾客(出产环境更多)凌潇潇姚晨为什么离婚。

一起发现装备的消费等候战略为 YieldingWaitStrategy 这种等候战略的确会履行 yield 来让出 CPU。

代码如下:



开始看来和这个等候战略有很大的联系。

本地模仿

为了验证,我在本地创立了 15 个 Disruptor 行列一起结合监控调查 CPU 的运用情况。




创立了 15 个 Disruptor 行列,一起每个行列都用线程池交游 Disruptor 行列里边发送 100W 条数据。

消费程序仅仅只是打印一下:



跑了一段时间发现 CPU 运用率的确很高:



一起 Dump 线程发现和出产的现象成人按摩也是共同的:消费线程都处于 Runnable 状况,一起都在履行 yield。

经过查询 Disruptor 官方文档发现:



YielduberingWaitStrategy 是一种充沛压榨 CPU 的战略,运用自尤靖茹,一份十分无缺的CPU 100%排查优化攻略,人民医院旋 + yield 的方法来进步功能。

当消费线程(Event Handler threads)的数量小于 CPU 中心数时引荐运用该战略。



一起查阅到其他的等候战略 BlockingWaitStrategy (也是默许的战略),它运用的是锁的机制,对 CPU尤靖茹,一份十分无缺的CPU 100%排查优化攻略,人民医院 的运用率不高。

所以在和之前相同的条件下将等候战略换为 BlockingWaitStrategy。





和方才的 CPU 比照会发现到后边运用率会有显着的下降;一起 Dump 线程后会发现大部分线程都处于 Waiting 状况。

优化处理

看样子将等候战略换为 BlockingWaitStrategy 能够减缓 CPU 的运用。

但留意到官方对 YieldingWaitStrategy 的描绘里谈到:当消费线程(Event Handler threads)的数量小于 CPU 中心数时引荐运用该战略。

而现有的运用场景很显着消费线程数现已大大的超过了中心 曼彻斯特CPU 数了,由于我的运用方法是一个 Disruptor 行列一个顾客,所以我将行列调整为只要 1 个再试试(战略依然是 YieldingWaitStrategy)。




跑了一分钟,发现 CPU 的运用率一直都比较平稳并且不高。

总结

所以排查到此能够有一个定论了,想要底子处理这个问题需求将咱们现有的事务拆分;现在是一个运用里一起处理了 N 个小浣熊事务,每个事务都会运用好几个 Disruptor 行列。

由所以在一台服务器上运转,所以 CPU 资源都是同享的,这就会导致 CPU 的运用率居高不下。

所以咱们的调整方法如下:

  • 为了快速缓解这个问题,先将等候策轻小说文库略换为 Blocki尤靖茹,一份十分无缺的CPU 100%排查优化攻略,人民医院ngWaitStrategy,能够有用下降 CPU 的使刘德华电影全集用率(事务上也还能承受)。
  • 第二步就需求将运用拆分(上文模仿的一个 Disruptor 行列),一个运用处理一种事务类型;然后别离独自布置,这样也能够相互阻隔互不影响。

当然还有其他的一些优化,由于这也是一个老体系了,这次 Dump 线程竟然发现创立了 800+ 的线程。

创立线程池的方法也是中心线程数、最大线程数是相同的,导致一些闲暇的线程也得不到收回;这样会有许多无意义的资源耗费。

所以也会结合事务将创立线程池的方法调整一下,将线程数降下来,尽量的物尽其用。

作者:crossoverJie

来历:51CTO技能栈

转载请保留出处和链接!

本文链接:http://www.dwsblog.com/articles/110.html

文章底部广告(PC版)
文章底部广告(移动版)
百度分享获取地址:http://share.baidu.com/
百度推荐获取地址:http://tuijian.baidu.com/,百度推荐可能会有一些未知的问题,使用中有任何问题请直接联系百度官方客服!
评论框上方广告(PC版)
评论框上方广告(移动版)
推荐阅读
11月17日

刘慈欣,日本无比滴,泰国青草膏?网红神药到底有多神?专家无情扒开本相,地包天

发布 : | 分类 : 微博热点 | 评论 : 0人 | 浏览 : 230次

随着网红经济和代购的不断发展,在我们的身边出现了各种各样的外国神药,被各大网红和代购吹得是天花乱坠,功效好的不得了,那么这些网红神药到底有没有用,今天我们就来一起揭秘这些网红神药的真面目。...

标签 :