- 博客(19)
- 问答 (1)
- 收藏
- 关注
原创 性能调优 19. Tomcat 线程模型详解&性能调优
Reactor模式:堆模式或者反应器模式。 向反应器注册一个事件处理器,表示自己对某些事件感兴趣,时机来了,具体事件处理程序通过事件处理器对某个指定的事件发生做出反应。这种控制逆转又称为“好莱坞法则”(不要调用我,让我来调用你主要步骤注册感兴趣的事件->扫描是否有感兴趣的事件发生->事件发生后做出相应的处理。 直接使用I/O模型,在代码逻辑处理效率上还是不够的。比如NIO下,启动服务器主线程,不断进行轮询,等待连接上来,连接上来后对连接通道读取数据,然后在做业务逻辑。
2024-11-11 15:52:41
1111
1
原创 性能调优 18. Tomcat整体架构及其设计精髓分析
Tomcat是Http服务器+Servlet容器,是Web服务器,用于服务端运行Servlet和JSP的技术,也支持很多web应用程序开发技术如JPA,JSF等。 应用部署方式主要分为,war部署,文件夹部署,描述符部署(在server.xml中配置部署)。 描述符部署下可以通过配置host 和Context部署应用,涉及docbase,appbase,path的设置。 还有一种特别就是在目录创建xml部署。
2024-08-11 19:15:08
839
原创 性能调优 17. GraalVM云原生时代的Java虚拟机
Java总体上是面向大规模、长时间的服务端应用而设计的。 即时编译器(JIT)、性能优化、垃圾回收等有代表性的特征。 微服务时代对启动速度达到最高性能的时间提出了新的要求! 在微服务的背景下,提倡服务围绕业务能力构建,不再追求实现上的严谨一致。 单个微服务就不再需要再面对数十、数百GB乃至TB的内存。 有了高可用的服务集群,也无须追求单个服务要7×24小时不可间断地运行,它们随时可以中断和更新。 所以微服务。
2024-07-25 11:03:26
3403
1
原创 性能调优 16. 让Java性能提升的JIT深度剖析
在JDK10之前HotSpot 虚拟机中,内置了两个 JIT编译器,分别为 C1 编译器和 C2 编译器。 JDK10开始,内置两个 JIT,分别为 C1 编译器和 Graal 编译器(跟GraalVM知识相关,替代C2编译原来C2编译器的太难维护)。 JDK7之前运行程序指定虚拟机使用的JIT编译器比如是C1还是C2。 在 JDK7之前,需要根据程序的特性来选择对应的 JIT,虚拟机默认采用解释器和其中一个编译器配合工作。 JDK7及以后引入了分层编译。
2024-07-10 09:50:20
916
原创 性能调优 15. JVM调优实战及常量池详解
GC日志是java虚拟机产生的一种描述性的文本日志。就像开发java程序需要输出log日志一样。JAVA 虚拟机用GC日志,来描述垃圾回收过程中运行情况。 如果对线上系统不太了解可以尝试分析GC日志。 对于java应用可以通过一些配置把程序运行过程中的GC日志全部打印出来,然后分析GC日志得到关键性指标,分析GC原因,调优JVM参数。 打印GC日志方法,在JVM参数里增加参数,添加参数如下 %t 代表时间。
2024-06-14 15:53:01
1002
原创 性能调优 14. JVM调优工具详解及调优实战
市面上调优工具无非就是JDK基础调优命令的整合,这边调优使用JDK1.8进行。 如果启动一个应用程序在运行,可用jps查看其进程id,接着就可以用JDK自带各种命令优化应用。 用jps查看JAVA进程的进程ID。 此命令可以用来查看内存信息,实例个数以及占用内存大小。 主要命令 输出结果格式如下: 1. num:序号。 2. instances:实例数量。 3. bytes:这些实例总共占用空间大小字节。 4. classn
2024-06-04 17:56:14
1058
原创 性能调优 13. 垃圾收集器G1&ZGC详解
是JDK 11中推出的一款追求极致低延迟的垃圾收集器,它曾经设计目标包括: 1. 停顿时间不超过10ms(JDK16已经达到不超过1ms 2.停顿时间不会随着堆的大小,或者活跃对象的大小而增加。 3. 支持8MB~4TB级别的堆,JDK15后已经可以支持16TB。 如果使用ZGC来做Java项目,像对STW敏感的证券系统,游戏的系统都可以去用Java来做(以前都是C或者C++的市场),所以ZGC的出现就是为了抢占其他语言的市场。
2024-04-26 13:54:36
2712
2
原创 性能调优 12. 垃圾收集器ParNew&CMS与底层三色标记算法详解
8. -XX:+CMSParallellnitialMarkEnabled:表示在初始标记的时候多线程执行,缩短STW,默认开启。 9. -XX:+CMSParallelRemarkEnabled:在重新标记的时候多线程执行,缩短STW,默认开启。。
2024-04-11 09:59:09
898
原创 性能调优 9. 从JDK源码级别彻底剖析JVM类加载机制
自定义类加载器只需要继承 java.lang.ClassLoader 类,该类有两个核心方法。一个是,实现了双亲委派机制,还有一个方法是findClass用来加载类,默认实现是空方法,自定义类加载器主要重写findClass方法就行。try {//defineClass将一个字节数组转为Class对象,这个字节数组是class文件读取后最终的字节数组。// 指定加载资源目录。
2024-01-29 10:51:48
886
1
原创 性能调优 8. MySQL全局优化与MySQL8.0新增特性详解
要么都成功要么回滚。 MySQL8.0开始支持原子DDL操作,其中与。
2024-01-23 10:11:07
4701
1
原创 性能调优 6. MySQL锁机制与优化实践
1.MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行update、insert、delete操作会自动给涉及的表加写锁。没有事务相当于一条SQL语句就是一个事务。 2. InnoDB在执行查询语句SELECT时(非串行隔离级别),不会加锁。但是update、insert、delete操作会加行锁,加的是写锁。读锁会阻塞写,但是不会阻塞读。写锁则会把读和写都阻塞。
2023-12-23 20:12:41
1760
1
原创 性能调优 5. MySQL事务原理与优化以及MVCC底层原理剖析
数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,就会导致脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题,为了解决多事务并发问题,数据库设计了事务隔离机制(级别)、锁机制、MVCC多版本并发控制隔离机制、日志机制,用一整套机制来解决多事务并发问题。 事务是一组操作,要么全部成功,要么全部失败,目的是为了保证数据最终的一致性。 事务具有以下4个属性,通常简称为事务的ACID属性。 原子性(Atomi
2023-12-08 15:31:11
119
原创 性能调优4. Mysql索引优化实战二
看下面例子。 对于上面这两种 name>‘a’ 和 name>‘zzz’ 的执行结果,name>'a’下不走索引,name>'zzz’下又走索引。跟MySQL的cost成本计算有关。 MySQL最终是否选择走索引或者一张表涉及多个索引,MySQL最终如何选择索引,可以用MySQL自带的trace工具来一查究竟,开启trace工具会影响MySQL性能,所以只能临时分析SQL语句使用,用完之后应该立即关闭。 MySQL支持两种方式的。
2023-11-23 15:54:15
110
原创 性能调优2. Mysql的Explain详解(学习笔记)
MySQL默认提供性能分析工具,可以获取SQL语句的执行计划,分析使用了什么索引,扫描了多少行,以此来判断结构性能瓶颈,是否可以优化等。用法 在 SELECT 语句之前增加 EXPLAIN 关键字,MySQL 会在查询上设置一个标记,执行查询时会返回执行计划的信息,而不是执行该条 SQL。 如 EXPLAIN 你的 sql 语句注意 1. 如果 SQL 语句中的 FROM 中包含子查询,仍会执行该子查询,将结果放入临时表中。
2023-11-04 19:12:35
133
1
原创 性能调优1. 深入理解Mysql索引底层数据结构与算法(新手练习)
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S
2023-10-25 14:30:51
115
1
怎么用okhttp3,重复请求同一个外部服务接口,并合并返回结果
2020-05-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人