城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

线程池监控这么做很简单

8月4日 失了心投稿
  概述
  最近公司项目生产上遇到了一个线程池的问题,由于线程池的配置参数开发人员没有根据实际情况考量,拍脑袋想了一个,将核心线程数和队列数都设置的很大,实际生产提交的任务很多,导致出现CPU很高,影响了其他的一些业务接口。回过头,复盘发现,我们没有对生产的线程池任务做一些监控,比如该任务执行了多长时间,在队列中等待了多少时间等等,那么有什么线程池的编程范式可以监控线程池的任务执行情况呢?目标
  主要是为了实现下面的2个目标:线程池中任务在队列中等待的时间线程池中任务运行的时间
  我们可以根据实际场景需求打印日志或者通过prometheus输出到监控系统中。解决方案
  我们可以采用装饰者设计模式,写一个线程池任务的包装类,公司项目中所有要提交的任务必须要使用这个包装类去提交任务,定义任务的包装类代码如下:Slf4jpublicclassRunnableWrapperimplementsRunnable{实际要执行的线程任务privateR线程任务被创建出来的时间privatelongcreateT线程任务被线程池运行的开始时间privatelongstartT线程任务被线程池运行的结束时间privatelongendT线程信息privateStringtaskI当这个任务被创建出来的时候,就会设置他的创建时间但是接下来有可能这个任务提交到线程池后,会进入线程池的队列排队publicRunnableWrapper(Runnabletask,StringtaskInfo){this。this。taskInfotaskIthis。createTimeSystem。currentTimeMillis();}当任务在线程池排队的时候,这个run方法是不会被运行的但是当任务结束了排队,得到线程池运行机会的时候,这个方法会被调用此时就可以设置线程任务的开始运行时间Overridepublicvoidrun(){this。startTimeSystem。currentTimeMillis();此处可以通过调用监控系统的API,实现监控指标上报用线程任务的startTimecreateTime,其实就是任务排队时间这边打印日志输出,也可以输出到监控系统中log。info(任务信息:〔{}〕,任务排队时间:〔{}〕ms,taskInfo,startTimecreateTime);接着可以调用包装的实际任务的run方法task。run();任务运行完毕以后,会设置任务运行结束的时间this。endTimeSystem。currentTimeMillis();此处可以通过调用监控系统的API,实现监控指标上报用线程任务的endTimestartTime,其实就是任务运行时间这边打印任务执行时间,也可以输出到监控系统中log。info(任务信息:〔{}〕,任务执行时间:〔{}〕ms,taskInfo,endTimestartTime);}}复制代码
  后续我们提交线程池任务统一使用该任务包装类。使用案例
  比如定义一个线程池如下,核心线程数40,最大线程数800,线程队列为500:Bean(destroyMethodshutdown)publicThreadPoolExecutorsumTaskThreadPool(){returnnewThreadPoolExecutor(50,800,0L,TimeUnit。MILLISECONDS,newLinkedBlockingQueue(500));}复制代码
  定义一个求和的任务:publicclassSumRunnableimplementsRunnable{SneakyThrowsOverridepublicvoidrun(){intsum0;for(inti0;i100000;i){}Thread。sleep(1000);}}复制代码
  提交任务到线程池中:PostConstructpublicvoidinit()throwsInterruptedException{提交1000个线程任务for(inti0;i1000;i){定义求和任务SumRunnablesumRunnablenewSumRunnable();包装求和任务RunnableWrapperrunnableWrappernewRunnableWrapper(sumRunnable,求和线程任务i);提交任务threadPoolExecutor。submit(runnableWrapper);Thread。sleep(100);}}复制代码
  可以看到打印的结果如下图:
  这样就可以打印出任务的排队时间和执行时间了。总结
  不仅runnable可以进行这样的包装,对于Callable任务也可以进行包装。定义这样的包装类简单,难点在于如何根据打印出的日志进行分析和调整线程池参数。另外就是如何推动公司的同事都使用这样的线程池使用范式也是一大问题。
投诉 评论 转载

西安哪家的粉汤羊血最地道?在西安说起粉汤羊血,绝对木有人不晓得,粉汤羊血讲究的是麻,辣,咸,香,光,嫩,羊血鲜嫩,入口光滑,不腥、不膻。再泡上个馍,冬日里吃起来,又暖身子,又顶饱。来一碗热乎乎的粉汤羊血……李少莉姐弟的升职记如出一辙,到底谁是他们李家的贵人?长江后浪推前浪,浮事新人换旧人。然而在网络的浪潮里,李少莉的热度仍旧没有减退。我猜想并不仅仅是李少莉的奢华优雅触动了网友的神经,而大家更多的意难平是:凭什么她能从纺……蚂蚁金服在郑州招聘大量的bd岗位待遇都怎么样?首先呢,咱们得解释一下什么是bd,这个有人说了,不就是销售吗,其实是不然的,中间还是有区别的,bd商务经理是维护渠道客户,而不是直接面销终端的,bd的要求也比普通的销售更加的严……线程池监控这么做很简单概述最近公司项目生产上遇到了一个线程池的问题,由于线程池的配置参数开发人员没有根据实际情况考量,拍脑袋想了一个,将核心线程数和队列数都设置的很大,实际生产提交的任务很多,……农村盖房高度有限制,为何不能超过4层?有什么禁忌吗?我是黑嫂,我来回答。农村盖的房子,以前都是一层瓦房,现在则流行小楼,这些小楼是两层往上,有的是两层半,有的是三层,或者三层半。大多数都截停在了三层半,很多人对此不解……风吹半夏原著看到许半夏的原生家庭,才知她为何算计赵垒她还年轻,活动能力强,而经历的事毕竟比较少,容易操纵,与她合作会比较省心。给她点拍马溜须的机会,她才会跟我接近。赵垒的女友吃许半夏的醋,赵垒搂着她,说出了自己对许半夏的真……毛主席参观故宫城墙三次却不踏入半步,是为何?真实原因让人敬佩据曾经担任过故宫博物院保卫科科长的韩炳文回忆,伟大领袖毛主席是的的确确去过故宫的,而且还去过三次,只是每次都只走到了城墙参观,就是没有走进去。其实,早在北平和平解放的时候……在希望的田野上丨遍地金黄映秋色多地农田获丰收近日,全国大部分地区秋高气爽、多晴少雨,北方出现降温大风,利于秋粮脱水收获,秋收进度加快。据10月17日农业农村部农情调度显示,全国秋粮已收获9。88亿亩,完成75。7、同比快……总统亲自下场,马克龙放低姿态,在总统府设宴挽留企业留法就事实而言,对欧盟国家威胁最大的压根不是俄罗斯,而是欧盟的坚定盟友美国。在美国的双重打击下,大量欧盟企业选择离家出走,其他国家在欧盟国家的投资也在不断撤离。眼看着再不行动企业全……思域的扭矩不高,为何加速却很厉害?问题描述存在两个漏洞思域并不是台具备高性能的汽车说明:本田思域被戏称为百万以下无敌手的性能车,然而这种说法只能哄骗一些完全不具备机械常识的新手司机。这样的评价绝对不……晚上熬夜看球,保温杯里该加料了要说最近的热词,卡塔尔世界杯绝对算一个。令人激动的比赛盛况,令人头疼的时差,白天上班,晚上熬夜,成了球迷们的常态。编辑想问问你的身体还扛得住吗?是不是已经悄悄……中轴线上的名人(38)洪承畴和曾格林沁是街坊洪承畴是明末清初的政治家和军事家。由于后来降清做了贰臣,长期以来一直受到人们的非议。洪承畴的仕途之路,是从镇压农民起义开始的。他是明代的股肱之臣,也……
牛奶肌正妹迷人曲线好完美,运动时的深V造型太诱人魔兽世界怀旧服法师带小号刷血色,真正的日入千金,有哪些需要注伊藤美诚在国内热度很高,那么她和陈梦相比,谁的人气高呢?在儿子房间发现了这个,他说是手电筒!我怎么觉得不对劲呢?汤姆猫跑酷游戏投诉量高企孩子充值家长申请退款遭拒2007年毛岸青去世,现场多人前来吊唁,妹妹李敏李讷送最后一为什么宝妈带孩子后就没有了朋友?他被授予少将军衔,在1975年立下了大功一件,两年后却被开除火了5年的旗舰SUV即将焕新,新一代蔚来ES8信息曝光!有哪特锐德第三季度净利同比增长15。19宋诗评价不如唐诗?这个冷门诗派读起来充满哲学智慧姨妈味是什么味?为什么很多男生说能闻到女朋友的姨妈味?
你知道黄河在淄博市高青县的流向和位置吗?玲珑四犯为法源寺丁香度,大石心脏病与脑血管病命理特征与易医防治缺钱的时候可以提取公积金吗?缺钱可以提取住房公积金人类文明的摇篮崇尚武力的斯巴达税总详解六项减税政策组合发力释放减负红利行政前台工作总结小学生作文校园生活真快乐王石万科?管理层有多重要?福建顶级CEO让。。。华为畅享5s价格和参数配置介绍图文怎么让厨房保持干净让厨房保持干净的方法引产后吃哪些蔬菜好

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁