这可能是最简短的线程池分析文章了。 顶层设计,定义执行接口 Interface Executor(){ void execute(Runnable command);} ExecutorService,定义控制接口 interface ExecutorService extends Executor{ } 抽象实现ExecutorService中的大部分方法 abstract class AbstractExecutorService implements ExecutorService{ //此处只有提交} Th…

2021/04/29 0条评论 1098点热度 0人点赞 阅读全文

背景:在博客迁移过程,由于误操作原来的mysql无法启动,只能通过新建一个mysql,然后清空data目录,将原来的data都拷贝过去。 启动后登录没问题,读取也没问题,就是无法写入,出现了Table‘xxx’is read only。 我这是因为迁移后修改my.cnf文件多加了一个配置导致 [mysqld]log-error = /app/data/mysql/logs/error.logpid-file = /app/data/mysql/mysql.pidport = 3306socket = /app/da…

2021/04/26 0条评论 1284点热度 0人点赞 阅读全文

业务系统从公有云在迁移到专有云后,有几台服务器一直有问题,直接导致迁移进度无进展。通过 jstat -gcutil pid 5000 查看,发现应用程序的老年代已满,fullgc一直在增长,反而ygc很小。 猜测: 对象生成没有经过年轻代,直接进了老年代,程序里有大对象; 年轻代里没有连续的空间,导致无法创建数组直接进入老年代; 然后 jmap -heap pid 查看到应用的堆有2g,但是新生代只有167MB,新生代太小,不符合1:2的配置 Server compiler detected.JVM version…

2021/04/26 0条评论 1289点热度 0人点赞 阅读全文

先看下Thread的代码结构 public class Thread implements Runnable { //默认线程里存放的为空,维护的是当前线程关联的的ThreadLocal.ThreadLocalMap的值 ThreadLocal.ThreadLocalMap threadLocals = null; //线程退出时 private void exit() { //解除了线程和threadloca的关系 threadLocals = null; }} 再看下ThreadLocal的代码结构 publi…

2021/04/24 0条评论 1232点热度 0人点赞 阅读全文

转自:Java高级架构狮  链接:https://www.jianshu.com/p/5c62b71fd882 一. 前提 很早之前就了解到目前主流的APM开源框架如Pinpoint、SkyWalking等等都是通过java.lang.instrument包提供的字节码增强功能来实现的。趁着对这块的热情还没消退,抽时间分析一下java.lang.instrument包的使用方式,记录下来写成一个系列的文章。本系列博文针对的是JDK11,其他版本的JDK可能不适合。 二. instrument简介 java…

2021/04/22 0条评论 1521点热度 0人点赞 阅读全文

项目地址:https://github.com/yxkong/agent 目前已实现对线程池、jvm的监控; 主要是在线程池创建时,对线程池进行增强,将线程池强引用到bootstrap-load-client-0.1.jar中的ThreadPoolMonitorData里。 使用此包的前提是线程池是固定资源,启动后不会销毁,如果动态创建线程池并销毁,需要调用shutdown或者shutdowNow,这块已实现对对强引用的解除,否则因为这块强引用导致资源无法释放,没法被gc回收 bootstrap-load…

2021/04/21 0条评论 1089点热度 2人点赞 阅读全文

今天看了下github上发现前几年fork的项目,我这的最后更新时间是2年前,源头还在实时更新,要做一下同步,记录下步骤。 一、克隆自己fork的项目到本地 git clone https://github.com/yxkong/useful-scripts.git 并进入对应的目录 cd useful-scripts# 查看所有d的分支git branch -a* master remotes/origin/HEAD -> origin/master remotes/origin/master remote…

2021/04/21 0条评论 1054点热度 0人点赞 阅读全文

5ycode 被管理耽误的架构师。工作、学习过程中的知识总结与分享,jvm,多线程,架构设计,经验分享等。 28篇原创内容 公众号 读了Java线程池实现原理及其在美团业务中的实践 后,我就想一个问题,如果让我去做这个线程池的监控,我该怎么做? 要对线程池进行监控,首先得明白,我们监控线程池的目的是什么? 监控是为了防患于未然,防止生产事故的发生。或者能在未发生时就进行入状态。 出问题线程池的现象: 线程池异步处理,消费速度过慢,导致任务积压,响应过慢,或者队列有限,导致提交被拒绝; 使用线程池做并行请求…

2021/04/20 0条评论 1105点热度 0人点赞 阅读全文

13.2 线程安全 13.2.1 java语言中的线程安全 java语言中各种操作共享的数据分为以下五类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。 一、不可变 不可变的对象一定是线程安全了(废话,线程的不安全主要体现在增删改,只读没有任何不安全的地方) 如:java中的字符串实例是一个典型的不可变对象,用户调用内部的substring()、replace()这些方法都是返回一个新构造的字符串对象。 二、绝对线程安全 一 个类要达到“不管运行时环境如何,调用者都不需要任何额外的同步措施”可能需要付出非…

2021/04/08 0条评论 1169点热度 0人点赞 阅读全文

事故一,jvm相关 大对象(运营商数据;数据库查询未加查询条件,结果集过大;第三方接口或异步消息);来回转化 死循环; 推文并发量大 String.intern() 导致oom static字符串拼接 导致oom 堆内存过小 ConcGCThreads 线程过多,stw,导致性能上不去 jvm配置问题,堆、对象晋升(进入老年代过快或过慢) 额度服务因stw停顿过长导致程序性能不稳定 堆外内存过大; 堆外内存,人脸ocr服务,照片上传 排查方法: jmap -heap 查看进程jvm的使用情况jmap -histo …

2021/04/07 0条评论 1413点热度 0人点赞 阅读全文
12