![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
性能调优
文章平均质量分 82
smart哥
一名有10余年经验的互联网老兵,历经从传统软件公司到大型互联网公司的洗礼,早年在中兴通讯等大型通信公司担任项目leader,后随着互联网的崛起,先后在前美团支付等大型互联网公司担任架构师。对互联网架构底层技术有相当的研究和独特的见解,在多个领域有着丰富的实战经验。
展开
-
JVM Native内存泄露的排查分析(64M 问题)
我们有一个线上的项目,刚启动完就占用了使用 top 命令查看 RES 占用了超过 1.5G,这明显不合理,于是进行了一些分析找到了根本的原因,下面是完整的分析过程,希望对你有所帮助。会涉及到下面这些内容Linux 经典的 64M 内存问题堆内存分析、Native 内存分析的基本套路tcmalloc、jemalloc 在 native 内存分析中的使用finalize 原理hibernate 毁人不倦。原创 2023-11-08 09:23:46 · 1042 阅读 · 0 评论 -
Synchronized关键字使用不合理,导致的多线程下线程阻塞问题排查
在为客户进行性能诊断调优时,碰到了一个Synchronized关键字使用不合理导致多线程下线程阻塞的情况。用文字记录下了问题的整个发现-排查-分析-优化过程,排查过程中使用了商业化产品——XLand性能分析平台,通过文章主要希望跟大家分享下分析和优化思路以及注意点,有兴趣深入了解的同学可以评论交流。原创 2023-11-07 11:09:35 · 286 阅读 · 0 评论 -
再见,curder!
大家好,我是不耍嘴皮子,只讲java底层源码课的码炫课堂创始人码哥,全网唯一讲解及手写各大框架及中间件源码的极客,上班之余做源码课只是我的爱好,拯救水深火热中的curder屌丝们才是我的使命!众所周知,2022年毕业生已达1076万人,不管你是应届的或者非应届,此时此刻这就是与你竞争的庞大人群,请问你的优势在哪里?北大博士去当城管,清大硕士去三,四线城市街道办,人都已经被逼到这个份儿上了。。。有人说你又在贩卖焦虑了,其实我本无意贩卖焦虑,但是焦虑又是客观存在的,难到我不贩卖焦虑你就不焦虑了吗?在这个人均焦虑原创 2022-06-17 09:42:53 · 90 阅读 · 0 评论 -
说volatile和MESI协议没有关系的水货们请闭嘴吧
一直很想说这个问题,垃圾培训机构已经把韭菜们带偏了,网上千篇一律的说volatile和MESI协议没有关系,那究竟有没有关系呢??坐好认真听!1、缓存一致性问题 由于存储设备与处理器的运算速度差距很大,计算机系统在内存与处理器之间增加了一层高速缓存,将运算需要的数据复制到缓存中,让运算能快速进行。 有了高速缓存的存在以后,每个CPU的处理过程是, 先将计算需要用到的数据缓存在CPU高速缓存中,在CPU 进行计算时,直接从高速缓存中读取数据并且在计算完成 之后写入到缓存原创 2022-03-19 22:02:47 · 2360 阅读 · 7 评论 -
springboot-2.3.x最新版源码阅读环境搭建-基于gradle构建(全网首发)
springboot-2.3.x最新版源码阅读环境搭建-基于gradle构建(全网首发)文章目录springboot-2.3.x最新版源码阅读环境搭建-基于gradle构建(全网首发)一、前言二、环境准备三、下载源码四、开始构建五、源码测试六、问题及解决方案结语码炫课堂技术交流q群:963060292一、前言跟很多小伙伴聊天,发现一个严重的问题,很多小伙伴横向发展的貌似很不错,很多技术都能说出一二,但是如果在某个技术上深挖一下就不行了,问啥啥不会。就拿springboot来说,很多同学止步于spri原创 2020-07-09 09:15:09 · 15246 阅读 · 5 评论 -
spring5.3.x源码阅读环境搭建
spring5.3.x源码阅读环境搭建-gradle构建编译文章目录spring5.3.x源码阅读环境搭建-gradle构建编译一、依赖工具二、下载源码三、开始构建四、编译源码五、源码测试六、问题及解决方案附:spring源代码各个模块作用结语码炫课堂技术交流q群:963060292Spring系列生态十分丰富,涉及到各个方面。但是作为Spring生态的核心基础Spring,是最重要的环节,需要理解Spring的设计原理,就需要深度研读Spring源码。本文着重阐述当前最新版spring5.3.x的原创 2020-07-08 10:31:30 · 12922 阅读 · 7 评论 -
CLion调试redis6源码(全网首发)
CLion调试redis6源码(全网首发)文章目录CLion调试redis6源码(全网首发)背景一、安装配置cygwin二、安装clion三、clion中导入redis源码四、修改CMakeLists.txt文件五、编译&调试redis6源码六、注意点背景clion使用cmake来管理编译redis源码,而redis源码本身使用原生的make,因此直接将redis源码导入clion无法直接运行,需要配置cmake。写c程序大体步骤为:1).用编辑器编写源代码,如.c文件。2).用编译器编原创 2020-06-30 10:20:21 · 10963 阅读 · 4 评论 -
【面试题】研究过tomcat的NioEndpoint源码吗?请阐述下Reactor多线程模型在tomcat中的实现。
tomcat的底层网络NIO通信基于主从Reactor多线程模型。它有三大线程组分别用于处理不同的逻辑:Acceptor线程:等待和接收客户端连接。在接收到连接后,创建SocketChannel并将其注册到poller线程。poller线程:将SocketChannel放到selector上注册读事件,轮询selector,获取就绪的SelectionKey,并将就绪的SelectionKey(或SocketChannel)委托给工作线程。工作线程:执行真正的业务逻辑。备注:Accep...原创 2020-06-07 12:16:01 · 6325 阅读 · 0 评论 -
tomcat堆栈中10大常见线程详解
Tomcat作为一个服务器来讲,必然运行着很多的线程,而每一个线程究竟是干什么的,这个需要非常的清楚,无论是打印断点,还是通过jstack进行线程栈分析,这都是必须要掌握的技能。 本文带你基于Tomcat7,8,9的版本,识别Tomcat堆栈中的线程。1、main线程main线程是tomcat的主要线程,其主要作用是通过启动包来对容器进行点火:main线程一路启动了Catalina,StandardServer[8005],StandardService[Catalina],Standar.原创 2020-06-06 20:08:21 · 10203 阅读 · 0 评论 -
老大说了,再用lombok就给我收拾东西走人!
我承认,Lombok是一个很不错的Java库,它可以让你在少写代码的同时耍耍酷,简单的几个注解,就可以干掉一大片模板代码。但是,所有的源代码很多时候是用来阅读的,只有很少的时间是用来执行的(你可以细品这句话)。一年以前,我和大多数人都认为Lombok的出现会让Java的编码体验会更好,并极力的在我的团队中推荐使用Lombok。一年以后,我开始对此产生顾虑,尤其是在我准备为开源的博客系统Una-Boot升级Java版本时,我才意识到Lombok自己掉入了一个戏法陷阱。在我进一步分析其源代码并理解相关注解的原创 2020-06-06 18:11:09 · 666 阅读 · 1 评论 -
阿里《Java开发手册》中的 1 个bug!
本来打算写一篇《阿里巴巴为什么不允许日志输出时,使用字符串拼接?》的文章,主要是想从性能方面来说此问题,可在文章写到一半进行性能测试时,却发现了一个异常问题,实际测试的结果和手册上描述的结果是截然相反的!天撸了,怎么会发生这种事情?此时我的内心是拒绝的,因为文章已经写了一半了啊,这让我瞬间陷入了尴尬的境地。阿里巴巴的《Java开发手册》泰山版(最新版)是这样描述的,它在第二章第三小节的第 4 条规范中指出:【强制】在日志输出时,字符串变量之间的拼接使用占位符的方式。说明:因为 String原创 2020-06-06 16:21:07 · 501 阅读 · 0 评论 -
【悟思维】项目架构决定性能?优秀的架构胜过一万次的调优
这个问题很容易理解,一个单节点(一台应用服务器+一台数据库服务器)的系统架构,任凭你使出浑身解数来调优也不可能让系统达到百万级并发,别说百万级了,上万并发都不可能。不说其他的,在一个性能相对不错的物理机上,mysql最多也就能承载3500-4500的QPS,你说你能调优调到上万并发??在目前来看如果不借助于其他组件或者其他技术手段是不太可能的。首先大家要明白一个最底层的逻辑,所有的性能问题归根结底绝大多数都是要解决IO的读写性能问题。我们在线程模型上面孜孜不倦的追求,从BIO到NIO,再到react原创 2020-06-05 20:03:24 · 898 阅读 · 1 评论 -
【学心法】如何从源码角度体会作者的设计思想?
我们在做项目时候一般会遇到下面的问题:问题一是不知道如何去设计,比如刚入职场时,来一个需求需做概要设计,不知如何下手,不得不去看当前系统类似需求是如何设计的,然后仿照去设计。 问题二是设计的时候,考虑问题不周全,相比职场新手,这类人对一个需求依靠自己的经验已经能够拿出一个概要设计,但是设计中经常会遗漏一些异常细节,比如使用多线程有界队列执行任务,遇到机器宕机了,如果队列里面的任务不存盘的话,那么机器下次启动时候这些任务就丢失了。对于这些问题,说到底主要是因为经验不够,而经验主要从项目实践中积累,所以原创 2020-06-05 12:50:58 · 1518 阅读 · 0 评论 -
老大说了,即使你是女程序员,这性能调优你也得拿下!
【悟思维】项目架构决定性能?优秀的架构胜过一万次的调优这个问题很容易理解,一个单节点(一台应用服务器+一台数据库服务器)的系统架构,任凭你使出浑身解数来调优也不可能让系统达到百万级并发,别说百万级了,上万并发都不可能。不说其他的,在一个性能相对不错的物理机上,mysql最多也就能承载3500-4500的QPS,你说你能调优调到上万并发??在目前来看如果不借助于其他组件或者其他技术手段是不太可能的。首先大家要明白一个最底层的逻辑,所有的性能问题归根结底绝大多数都是要解决IO的读写性能问题。我们在线原创 2020-06-04 19:38:50 · 259 阅读 · 0 评论 -
【练技术】如何通过精研线程模型,cpu调度,内存模型等性能优化核心?
性能优化无非就是线程,cpu调度,以及内存之间的配合,这三者中任何一个达到极限,都会造成系统整体性能下降,甚至瘫痪。线程必然要由cpu调度才能活动起来,那么线程的活动也必须有自己的地盘,那么这个地盘就是内存区域。线程数越多,需要cpu的调度能力越强,需要的内存也就越大,那么线程不可能无限增大,总有个极限,当到达极限之后,系统性能将呈现抛物线形的状态急转往下。所以我们必须不能让cpu等资源达到这个极限值,一般在85%左右就可以了。intel的工程师曾今说过,我们为什么要让cpu达到100%的性能呢,能原创 2020-06-04 18:46:20 · 974 阅读 · 0 评论 -
多方面,全访问的剖析Tomcat十大线程和四大通道
tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对tomcat的优化也变得非常重要了。本专题课在调优压测时我们选择tomcat9,那我们为什么选择9版本呢?因为9的性能更高,更稳定。在源码研究演示过程中我会选择tomcat7,8,9三套源码进行比较演示性能的差异。一、Tomcat配置优化对于tomcat的优化,主要是从2个方面入手,一是,tomcat自身的配置,另一个是tomcat所运行的jvm虚拟机的调优。1、部署安装tomcat91、下载并安装:https:/.原创 2020-06-03 14:31:19 · 3597 阅读 · 0 评论