游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

线程池优化与监控

  有赞技术有赞coder
  点击关注有赞coder
  获取更多技术干货哦
  作者:明义、光线
  部门:业务技术
  一、前言
  随着应用不断的迭代更新,零售工程内异步任务逐渐增多,包括网络请求、本地DB操作、轮询等任务使用的都是同一个线程池,线程池极易打满(比如网络一慢就容易阻塞线程池),导致任务堆积,造成操作卡顿的现象。用户看到操作没反应,可能会更频繁的尝试操作,再加上不断轮询的任务,应用的线程池队列会快速积压更多的任务,卡顿现象加剧,单一线的线程池已经无法支撑业务需求:
  任务没有隔离,异步任务相互影响主要是长耗时影响短耗时任务轮回任务开销大:没有统一的轮询处理方式,业务方需要自己创建线程或线程池(有些干脆就在默认的IO线程池进行轮询),应用中存在大量的自建线程池,增加无谓的资源消耗缺少监控:缺乏线程池的监控和日志,线程池的运行状况和健康度无法衡量,一旦出现卡顿问题,排查非常困难,完全不知道是哪些任务造成的问题,伤害用户体验的同时,也极大的消耗开发人员的精力
  图注:短时间任务暴涨的情况,在几毫秒内触发多次任务
  二、整体设计目标:任务隔离,避免耗时任务影响交互统一轮询,减少资源开销任务监控,防止业务方使用错误信息采集与监控,快速定位排查问题
  优化的核心在于分离和监控
  分离:
  对原有的IO线程池进行拆分,分离出不适合放在这个线程池的任务,保证IO线程池能对大量、快速的本地任务给予更好的支持,而分离的关键就在于分离出慢和多的任务:避免耗时短的任务等待耗时长的任务避免频繁、大量执行的任务占据大量的线程池资源
  具体的策略包括:将网络请求的线程分离出来,放入单独的线程池中,避免因网络任务慢阻塞本地的快速任务将轮询任务分离出来,当轮询的任务耗时过长或者线程池打满的场景下,会极速加剧线程池的恶化,最终让主流程完全瘫痪,轮询任务不适合放在通用的线程池中,通过将它放入通用的轮询任务线程池,统一化的对轮询任务进行管理
  监控:除了已知的网络任务轮询任务需要分离出IO线程池之外,还需要增加对线程池的监控,进一步分离出不适合放在IO线程池的任务(同样是慢和多)通过监控每个任务执行的时长,分离出长耗时(即慢)的任务,分析出是因为逻辑bug还是本身的复杂度正常占用,如果是正常占用就考虑是否合适继续放在默认的IO线程池,最终目标是达成对慢的优化另外零售工程中还存在短时间大量重复任务堆积的现象,当线程池接近或达到负荷状态时,监控线程池中的任务,找到批量的任务,然后进行优化,最终目标是达成对多的优化通过上面的方式将慢的任务分离出去之后,并不代表这样就完事了,这些任务可能会消耗大量的系统资源,所以同样需要统一对这个线程池进行监控(主要是网络任务的监控),把慢网络请求找出来,达到对慢的进一步优化通过API监控业务方使用合理性,比如:使用多线程轮询的合理性
  三、技术实现2。1线程管理库
  目标:管理工程内所有线程池与线程创建子线程任务监控线程池隔离任务分开执行,使用不同线程池执行不同任务轮询任务的统一与异常任务的过滤线程池的自动最优设置线程库结构图
  线程池管理,目前会提供三种线程池:网络线程池:针对网络任务。更改方式:直接在网络库替换业务方无感知IO线程池:针对本地异步任务。更改方式:App启动时HookRxJava线程池替换业务方无感知轮询线程池:针对轮询任务,需要业务方的接入
  线程池API定义3。2轮询任务统一禁止时间间隔小于1秒轮询任务,防止高频轮询消耗资源所有轮询任务巡检间隔1秒检测一次轮询检测是独立的线程,只做轮询检测,有任务时死循环间隔检测,没有任务时则睡眠等待下次注册执行,根据结果轮询执行或睡眠线程任务模式有两种:
  单线程回调:表示最多占用一个线程。例:1秒轮询回调1次,再回调前会判断上个任务是执行完成,如果没有执行完成则回调pollTaskExceptionCallback(),如果已经执行完成则回调pollTaskCallback()
  多线程回调:表示最多占用30个线程。例:1秒轮询回调1次,再回调前会判断当前任务占用线程总量,如果没有执行完成则回pollTaskExceptionCallback(),如果已经执行完成则回调。pollTaskCallback()默认是单线程回调业务方可以指定轮询次数,或设置无限轮询轮询线程池动态扩容:初始线程为30个,如果使用线程等于核心线程则动态扩容2倍,最大限制120个核心线程轮询任务流程图
  轮询API定义任务过滤:
  轮询正常回调pollTaskCallback()方法,如果异常这时将回调到pollTaskExceptionCallback()方法。
  异常任务过滤的实现:记录所有任务。每次执行任务时会进行校验,校验监听者是否已经把自己申请的线程全部使用,如果已经全部占用将回调异常方法,直接到任务有一个释放后再继续回调。任务执行完后重设记录数据。
  轮询异常回调有三种触发场景:单线程任务没有释放超时。多线程任务占用线程超过最大数量。轮询线程池被全部占满超时。任务过滤流程图
  四、工程更改
  工程更改主要分为5块:网关请求线程池的替换,在构建RxJavaobservable替换成自定义网络线程池。RxJava默认线程池的替换,App启动时把RxJavaHook设置成自定义IO线程池。轮询业务接入统一轮询。网线线程池使用错误拦截,目的防止线程使用错误,禁止IO线程网络请求,通过拦截器方式实现。线程任务监听设置给APM,通过APM分析上报。
  备注:只有轮询需要业务方逐个替代其它都正常使用不感知。五、信息采集与监控任务提交之后记录每个任务的调用栈信息以及任务提交的时间,之后在任务真正开始执行时会记录任务开始的时间,任务执行完成后即可算出一个任务完整的执行时间、任务等待时间等,这样就可以抓取出慢的任务在任务执行完成时,如果线程池已满并且任务的等待时间超过阈值,则会拉出线程池任务栈的信息,用于查找出异常的任务线程池监听API
  任务监听实现流程
  改善效果:
  卡顿定义:包含主线程超过300ms慢方法、ANR、本地子线程操作超过1s、线程池阻塞、页面渲染时间超过200ms。卡顿次数趋势图
  图注:卡顿次数下降76
  六、未来规划支持更多维度的任务监控,并增加自动报警能力针对不同的机型进行最优线程池配置,最大化复用系统资源逐渐完善pthread、线程任务数量等监控能力

关于幼儿园大班拼音游戏教案踩石过河适用范围:本游戏适用于每课的巩固及单元、阶段性复习时使用。适用的内容以从读为主,可以是拼音字母、音节、音节词、偏旁、生字、词语等等,本游戏的道具简单,情境化的设置和竞赛化……三年级英语上册单词表(鲁教版)unit1hello喂;你好i我i’m(iam)我是hi喂;你好good好的morning早晨,上午how怎样,如何are是……小学一年级数学上册10的分与合的教学反思10以内的分与合是为以后计算加减法打基础的。只有熟练掌握了,才不致于后面学习10以内加减法时掰手指头的情况,现谈谈自己的教后反思:1、低年级孩子对于一些抽象问题的理解如果……怎样将国旗升上去教学反思在教学《怎样将国旗升上去》一课时,起初在我介绍完定滑轮和动滑轮的使用后,直接放手让学生实验,并探究起作用。结果实验一团糟:线绳如何打结、线绳如何穿过滑轮,数据没有及时记录,只顾……生命之所以是一枝铅笔阅读练习及答案如果说生活是一张白纸,等待我们用血水和泪水描绘自己的奋斗和拼搏的轨迹,那么生命便是一枝铅笔,它总是用自己瘦瘦的身躯,在洁白的素笺上流泻出笔底的风风雨雨生命之所以是一枝铅笔……敲开世界冠军的大门教学设计范文教学目标:1、按四项要求预习课文。2、学会本课10个生字;理解14个词语的意思,并用终于造成句;联系课文内容,理解3个反问句的意思。3、能对课文中强烈表达思想……整体美化说课稿范文今天我说课的课题是浙教版信息技术七下第十八课《整体美化》。一、说说教材1、本节课的地位和作用在这节课之前,学生应该已经完成了一份电子报刊,但是可能大部分同学的……小稻秧脱险记教学设计模板教学过程:一、导入1。同学们,今天我们来学习《小稻秧脱险记》,请小朋友把手伸出来,跟老师一起写课题,注意稻和秧的写法。2。学这篇课文,我们有四项任务。(出示投……小学体育耐久跑说课稿你写过说课稿吗?下面是小编收集整理体育《耐久跑》说课课件,希望对您有所帮助!如果你觉得不错话,欢迎分享!一、教材概述:耐久跑是九年义务教育《全日制初级中学体育教学大……毕淑敏提醒幸福阅读答案毕淑敏是我国一级作家、内科主治医师、北京作家协会副主席、北京师范大学文学硕士,著有《毕淑敏文集》十二卷,长篇小说《红处方》《血玲珑》《拯救乳房》《女心理师》《鲜花手术》等畅销书……神采飞扬的意思和造句导语:中医历来认为,养生就是养精气神。如果你的面容神采较好,那么很可能你的精气神比较足。这是有一定的中医理论依据的,如果在生活中,我们也都注意去关注自己的精气神,在精气神三方面……四则运算教学反思范文计算虽然在上一学期关注细节的要求下很多孩子的学习习惯有了可喜的变化和进步,但这个教学内容是在新学期刚开始学,学生进过一个假期的放松指望今天一下把他们拉回来,还是不行的,需要时间……
微商交易防骗术买龟被骗?不用怕,教你学会辨别与防范骗子她,有着甜美清纯的头像,活泼俏皮的签名。我意识到,我遇到了一位千古难寻的稀世龟密!踏入她的神秘闺房,一睹其芳香尊容,不禁让我想入非非。啊,这样的妹子,怎能不叫……LK分享自动驾驶放大信息安全隐忧计算平台在智能汽车中是最重要的一部分,覆盖芯片、内核、中间件、软件、操作系统、应用开发,贯穿车辆整个生命周期,可起到核心作用。在近日举办的第八届国际智能网联汽车技术年会上,国汽……VIVOX70系列配得上年度工匠的称号昨晚的VIVOX70系列新品发布会,总共发布了三款机型:VIVOX70、VIVOX70Pro、VIVOX70Pro。作为VIVO推出的首款影像旗舰机,其定位还是很明显的,……蔚来首款轿车申报图曝光,续航超1000Km,零百加速3。9秒作为蔚来的首款轿车,ET7的信息很早之前就已经出现在各大汽车网站之中,该车不管是在续航上,还是性能上都相当亮眼。近日,在新一期工信部新车申报目录中,我们看到了蔚来ET7的……特斯拉宣布全球范围采用磷酸铁锂电池电车汇消息:特斯拉在美国当地时间10月20日发布的2021年三季报中表示,对于标准续航版的Model3和ModerlY,正逐渐调整为搭载磷酸铁锂电池,调整范围涉及全球市场,而长……好音质与低延迟兼备,还有长续航,南卡N2s蓝牙耳机体验自从3。5mm耳机接口在手机上消失后,现如今真无线蓝牙耳机的普及度已经非常高了,几乎大多数人在为手机选择耳机配塞时都将真无线蓝牙耳机作为首要选择。确实,与有线耳机相比,真无线蓝……全世界最刺激的三款过山车,第一名全长1700米第三名:富士急乐园高飞车位于日本山梨县,长度为1000米、高度43米,是全球过山车之最,游客可以体验到2秒内从0加速到100千米的加速度和在垂直上升到43米高的塔上之后,……原今日头条与今日头条极速版有什么区别?是重复的吗?今日头条普通版和今日头条极速版是有区别的,并不能说重复。二者在功能、定位、面向人群方面存在着差异。普通版的功能比较全面一些普通版不但能浏览资讯,还融合了火山、抖音、懂车帝……赤壁之战,曹操百万大军为什么会败给东吴三万人马?这个人很关键在民间谈论三国,说有三大不明:关羽来路不明、貂蝉生死不明、徐庶去向不明。徐庶是一个非常传奇的人物,身在曹营心在汉,说的就是徐庶。在到荆州之前,刘备是一个常败将军,被曹操打到闻风……快讯!康文森与戴姆勒达成专利和解!Avanci汽车专利池再进作者:黄莺4月23日,据国外媒体Juvepatent报道,专利运营公司康文森(Conversant)与德国汽车制造商戴姆勒的专利诉讼纠纷在上周达成双方和解。但并未有更多细……分析师预计特斯拉今年营收突破800亿美元股价至少达1580美NewStreetResearch的分析师PierreFerragu周三重申了对特斯拉的买入评级,将其目标价维持在1580美元,为华尔街最高。这位分析师上个月将特斯拉的目……一秒速热,真正解决一家人饮水所需,小米即热净水器Q600前言在城市中,家家户户都是自来水,但自来水不能直接饮用,虽然自来水公司都会经过杀菌消毒以及过滤,但北方的水还是有很多沉淀物的。这就是为什么烧水壶底部全是水垢的原因,虽然看……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网