java 可达性分析算法_js并发请求

java 可达性分析算法_js并发请求作者:Grey原文地址:OkHttpClient调优案例实际案例系统运行一段时间后,线程数量飙升,持续居高不下排查工具https://fastthread.io/这个工具是在线的,可以将日志文件上传上去后直接生成分析报告,并且可以导出为PDF以下是我导出的分析结果值得关注的指标:和占了前两位,由于很多同事开发的时候,没有定义有意义的线程名称,所以这2031个线程不好排查,我们就从这里的线程数入手,很显然,这里是的使用问题,所以,我们排查了一下系统中所有使用的地方,发现所有的用法都是这样用的:因为我们

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

OkHttpClient 调优案例

作者:Grey

原文地址:OkHttpClient 调优案例

实际案例
系统运行一段时间后,线程数量飙升,CPU持续居高不下

排查工具
https://fastthread.io/

这个工具是在线的,可以将dump日志文件上传上去后直接生成分析报告,并且可以导出为PDF
以下是我导出的分析结果

值得关注的指标:

image

poolOkHttp ConnectionPool占了前两位,由于很多同事开发的时候,没有定义有意义的线程名称,所以pool这2031个线程不好排查,

我们就从OkHttp ConnectionPool这里的线程数入手,很显然,这里是Okhttp的使用问题,

所以,我们排查了一下系统中所有使用Okhttp的地方,发现所有OkhttpClient的用法都是这样用的:

image

因为我们有好多的服务,每个服务都可能会用OkhttpClient,所以图中的getHttpClient()方法遍布各地,这个方法有什么问题呢?

我们进到了OkttpClient的源码中,看到了这个构造方法,找到了原因:

image

这个构造方法中,每次拿一个OkhttpClient客户端,

就要new一个ConnectionPool

类似与每次new一个Thread就要new一个ThreadPool一样,

ConnectionPool完全是可以复用的,所以不需要new ConnectionPool,复用即可,

所以我们把OkhttpClient的获取逻辑修改成了以下:

image

即每个OkhttpClient复用一个ConnectionPool
为了验证,我特意在IDEA里面写了两个小程序来实验一下:

image

image

源码:

OkHttpClientNotSharePool

OkHttpClientSharePool

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234509.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • opkg list 报错

    opkg list 报错opkglistCollectederrors:*opkg_conf_load:Couldnotlock/var/lock/opkg.lock:Resourcetemporarilyunavail echo”nameserver114.114.114.114″>/tmp/resolv.conf rm-f/var/lock/opkg.lock opkgupdate

    2022年5月27日
    112
  • PHP实现图片的等比缩放和Logo水印功能示例

    PHP实现图片的等比缩放和Logo水印功能示例

    2021年10月25日
    53
  • linux查看java程序线程命令_linux查找字符串命令

    linux查看java程序线程命令_linux查找字符串命令在linux系统下可以通过命令查看进程,那么具体是那个命令呢?下面由学习啦小编为大家整理了linux查看进程的命令,希望对大家有帮助!一、linux查看进程的命令有ps、pstree、pgrep等1、ps显示进程信息,参数可省略-aux以BSD风格显示进程常用-efH以SystemV风格显示进程-e,-A显示所有进程a显示终端上所有用户的进程x显示无终端进程u显示详细信息f…

    2022年8月24日
    14
  • windows安装anaconda python,pycharm[通俗易懂]

    windows安装anaconda python,pycharm[通俗易懂]windows安装anaconda python,pycharm

    2022年4月24日
    35
  • &0xffffffff(0x08)

    答案是-2为什么呢这里涉及到有符号整型数的补码,正数的补码与原码相同。负数的补码,将其原码除符号位外的所有位取反后加101111111+01111111=11111110符号位溢出了取反10000001再加110000010结果就得-2在网上看别人代码的时候,经常会看到他们把INF设为0x7fffffff,奇怪为什么设一个这么奇怪的十六进制数,一…

    2022年4月12日
    43
  • sql与hsql的区别以及分别怎么用!

    sql与hsql的区别以及分别怎么用!在java开发当中,会用到一些框架,比如说sh(struts和hibernate),ssh(struts,spring以及hibernate)等这些框架,hibernate因为连表方便,直接将表映射到java实体类中,因此用到的比较广泛,那sql和hsql区别在于哪里呢?又如何使用呢?1.java中用sql实现增删改查,sql是直接面向数据库的,下面附上一段代码解析:try{24…

    2022年9月22日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号