当前位置: 首页 > news >正文

网站备案号是什么微信棋牌游戏代理平台

网站备案号是什么,微信棋牌游戏代理平台,网站域名备案与不备案的区别,上海网站搭建公司哪家好一、问题起源 在处理一次生产环境cpu拉满问题时#xff0c;把日志拉下来看发现很多http请求调用出错#xff0c;项目使用的是okhttp 3.8.1版本。 二、问题描述 问题出在okhttp3.Dispatcher.finished(Dispatcher.java:201)代码如下#xff1a; void finished(AsyncCall c…一、问题起源 在处理一次生产环境cpu拉满问题时把日志拉下来看发现很多http请求调用出错项目使用的是okhttp 3.8.1版本。 二、问题描述 问题出在okhttp3.Dispatcher.finished(Dispatcher.java:201)代码如下 void finished(AsyncCall call) {finished(runningAsyncCalls, call, true); } void finished(RealCall call) {finished(runningSyncCalls, call, false); } private T void finished(DequeT calls, T call, boolean promoteCalls) {int runningCallsCount;Runnable idleCallback;synchronized (this) { //201行if (!calls.remove(call)) throw new AssertionError(Call wasnt in-flight!);if (promoteCalls) promoteCalls();runningCallsCount runningCallsCount();idleCallback this.idleCallback;}if (runningCallsCount 0 idleCallback ! null) {idleCallback.run();} }private void promoteCalls() {if (runningAsyncCalls.size() maxRequests) return; // Already running max capacity.if (readyAsyncCalls.isEmpty()) return; // No ready calls to promote.for (IteratorAsyncCall i readyAsyncCalls.iterator(); i.hasNext(); ) {AsyncCall call i.next();if (runningCallsForHost(call) maxRequestsPerHost) {i.remove();runningAsyncCalls.add(call);executorService().execute(call);}if (runningAsyncCalls.size() maxRequests) return; // Reached max capacity.} } 三、分析代码 在OkHttpClient中final Dispatcher dispatcher; 作为成员对象而我们代码中OkHttpClient作为连接池是单例的这里是对dispatcher做synchronized。 追踪代码发现在finished的调用方法中我们方法中使用的是异步AsyncCall而这里synchronized方法中的promoteCalls被置为true。所以会调用promoteCalls()方法 而promoteCalls()方法中会继续调用executorService().execute(call);就是这里问题大了synchronized中执行http请求那上面代码中的超时不就长时间占用锁了怪不得进程blocked了。 关于线程的BLOCKED需要知道 java.lang.Thread.State: BLOCKED等待监视器锁而被阻塞的线程的线程状态当进入 synchronized 块/方法或者在调用 wait()被唤醒/超时之后重新进入 synchronized 块/方法 但是锁被其它线程占有这个时候被操作系统挂起状态为阻塞状态。若是有线程长时间处于 BLOCKED 状态要考虑是否发生了死锁deadlock的情况。blocked的线程不会消耗cpu但频繁的频繁切换线程上下文会导致cpu过高。线程被频繁唤醒,而又由于抢占锁失败频繁地被挂起. 因此也会带来大量的上下文切换, 消耗系统的cpu资源。 四、解决方案 okttp关于这个问题已经有过解答 Dispatcher no longer has quadratic behaviour by iamdanfox · Pull Request #4581 · square/okhttp · GitHub [improvement] okhttp 3.12.0 - 3.13.1, to pick up perf improvements to okhttp3.Dispatcher by iamdanfox · Pull Request #940 · palantir/conjure-java-runtime · GitHub 解决方案就简单多了升级okhttp到3.14.9虽然目前最新稳定版本为4.9.3但是OkHttp 4发布,从Java切换到Kotlin。谨慎一点还是小版本升级吧。 在3.14.9中这部分代码被优化为 private boolean promoteAndExecute() {assert (!Thread.holdsLock(this));ListAsyncCall executableCalls new ArrayList();boolean isRunning;synchronized (this) {for (IteratorAsyncCall i readyAsyncCalls.iterator(); i.hasNext(); ) {AsyncCall asyncCall i.next();if (runningAsyncCalls.size() maxRequests) break; // Max capacity.if (asyncCall.callsPerHost().get() maxRequestsPerHost) continue; // Host max capacity.i.remove();asyncCall.callsPerHost().incrementAndGet();executableCalls.add(asyncCall);runningAsyncCalls.add(asyncCall);}isRunning runningCallsCount() 0;}for (int i 0, size executableCalls.size(); i size; i) {AsyncCall asyncCall executableCalls.get(i);asyncCall.executeOn(executorService());}return isRunning; } 执行HTTP请求被移出了synchronized方法了。
http://www.ho-use.cn/article/10821681.html

相关文章:

  • 微信网站开发wordpress做动态页面
  • 招商加盟网站开发一叶子网站建设目标
  • 东莞横沥网站设计室内设计学校全国排名
  • 做瞹网站ppt公司简介模板
  • 家政网站怎么做怎么用wordpress
  • 网站建设的一般流程是东莞seo优化公司
  • 淘宝网做宝贝详情用哪个网站什么是百度快照
  • 网站建设优化佛山深圳南山区住房和建设局网站官网
  • 山西建设工程协会网站南宁市建设工程造价信息网
  • 张家界公司网站建设做导航网站不侵权吗
  • 在网站设计中 网页框架设计wordpress 栏目 伪静态
  • 建站需要注意哪些无锡网站定制
  • 网站内页一般多久收录门户网站建站要求
  • 制造业外贸营销网站建设潍坊中脉网站建设
  • 东光网站制作做盗版漫画网站
  • 免费网站奖励自己游戏网站直播的功能怎样做
  • 网站建设对称对比型东莞搜索排名提升
  • 深圳网站建设968网站建设对电子商务中的作用
  • 商务网站创建设计方案md5(wordpress)
  • 西安工程建设信息网站石家庄新闻最新消息今天
  • 女做受视频网站个人网页设计欣赏网站
  • 宽屏网站模板企业源码dedecms 获取网站地址
  • 在阿里云建设一个网站的全流程qq空间破解版免费下载
  • 阿里云从哪里建设网站付费阅读网站建设
  • 建设网站需要什么基础昆山市住房和城乡建设网站
  • 成都网站的优化专门做环保设备的网站
  • 将网站加入小程序采集网站怎么做
  • 杭州网站建设杭州沃迩夫建设部人事教育司网站
  • 网站与系统对接图文方案一_建设网站前的市场分析
  • 新圩做网站公司wordpress 4 导航菜单