性能调优
文章平均质量分 90
怎能止步于此
一个创业者,一个希望能够在人生中有不断尝试的人,不断对未来有梦想的人,猜测、谣言、苦难、挫折,一定会伴随着你。
展开
-
Mysql调优大全梳理(涵盖90%需要调优的场景)
前言学习这个文章需要具备一定的理论基础,不妨先来看一下我这篇文章《一文道尽数据库底层原理,探讨Mysql调优之道》1.Join语句优化Join语句相关算法算法1:Nested-Loop Join(NLJ)这种算法称为“嵌套循环Join”,大致是这样玩的:TableJoin Typet1ranget2reft3Allfor each row in t1 matching range{ for each row in t2 matching refere原创 2022-02-20 18:39:12 · 7838 阅读 · 8 评论 -
深入研究池化技术——线程池
线程池线程池顾名思义就是一个放线程的池子,使用线程池的好处有很多:重用已存在的线程控制并发功能强大从某种意义上来讲,线程池是一种特殊的对象池,因此你也可以使用对象池来自己实现一个线程池,当然一般情况下我们是不需要自己实现线程池的,使用JDK自带的线程池就可以了。话不多少,我们直接开干!首先我们用ThreadPoolExecutor创建一个线程池玩一玩:可以看到,它的构造方法里最多可以传入七个构造参数,我们就直接玩这个构造参数最多的吧。 ThreadPoolExecutor execu原创 2021-11-07 21:41:32 · 442 阅读 · 0 评论 -
一文道尽数据库底层原理,探讨Mysql调优之道
前段时间看过一部电影,叫做《英雄时代》,里面有句话是这样说的:生活这条狗啊,追的我连从容撒泡尿的时间都没有。是啊,确实如此,可只有当你足够强大起来,我们才能称为最大的玩家。数据库调优慢查询日志慢查询日志是Mysql内置的一项功能,可以记录执行超过指定时间的Sql语句考虑到慢查询日志细节比较多,在这里我专门记录了一部分手记,一起来看一下:相关参数与默认值参数作用默认值log_output日志输出到哪,默认FILE,表示文件;设置成TABLE,则将日志记录到mysql原创 2021-10-30 18:47:09 · 2295 阅读 · 2 评论 -
打通JVM调优第六战-代码缓存区(Code Cache)问题分析
代码缓存区代码缓存区是一块存储编译后代码的区域控制代码缓存区的配置有如下几个:属性作用默认值-XX:InitialCodeCacheSize设置代码缓存区的初始大小 ,以java -XX:+PrintFlagsFinal|grep InitialCodeCacheSize结果为准不同操作系统、不同编译器的值不同-XX:ReservedCodeCacheSize设置代码缓存区大小,以java -XX:+PrintFlagsFinal|grep ReservedCod原创 2021-10-28 19:48:59 · 2569 阅读 · 0 评论 -
打通JVM调优第五战-方法区溢出与直接内存溢出
方法区溢出与直接内存溢出方法区溢出方法区溢出总结直接内存溢出什么是直接内存?直接内存使用场景实战演练分配直接内存总结直接内存溢出问题直接内存总结方法区溢出我们本文主要探讨一下方法区溢出与直接内存溢出。先来回顾一下方法区的知识点:线程共享,用来存储被虚拟机加载的类型信息、常量、静态变量等在JDK8 之前,方法区是用持久代(Perm Gen)实现的,从JDK8 开始持久代被元空间(Metaspace)给代替了。同时方法区也成了一个逻辑上的概念。看下图:方法区的一部分在堆内存,另一部分在元空间原创 2021-10-27 22:49:47 · 807 阅读 · 2 评论 -
打通JVM调优第四战-栈内存溢出
栈内存溢出关于虚拟机栈与本地方法栈在java虚拟机规范里是这样描述的:如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError如果虚拟机的栈内存允许动态扩展,当无法申请到足够内存时,将抛出OutOfMemoryError虚拟机虽然是这样定义的,但是对于我们所熟悉的Hotspot虚拟机有两点意外:栈内存不允许动态扩展统一使用Xss设置栈大小,不区分虚拟机栈还是本地方法栈有的虚拟机是区分的,可以用Xss设置虚拟机栈,Xoss设置本地方法栈看下面一段原创 2021-10-26 23:59:51 · 214 阅读 · 0 评论 -
打通JVM调优第三战-堆内存溢出排查与分析
笔者有话说纸上得来终觉浅,绝知此事要躬行。这句话笔者一直把它当做自己的座右铭。希望大家也能抱有和笔者一样的姿态,多动手,多实践。让我们用实际行动证明,在我们年轻人的世界,不存在‘不可能’。聊聊内存溢出内存溢出是实际项目中经常会遇到的问题,关于内存溢出,可以细分为:堆内存溢出栈内存溢出方法区溢出直接内存溢出这四类。本文,我们就主要探讨一下堆内存溢出问题。看我下面演示一段容易造成OOM的代码:这段代码很简单,在main方法里面,我们不断地往oomList里面添加元素,然后使用我原创 2021-10-26 22:39:46 · 493 阅读 · 1 评论 -
打通JVM调优第二战-CPU过高问题定位
CPU过高问题如何定位?本文,我们来聊一下对于CPU过高问题如何定位。如果我们CPU占用率非常高,那么该怎样去定位哪段代码导致CPU过高呢?我们一般可以采用两种方式定位这种问题。top+jstacktop命令是linux中常用的命令,可以查看CPU的运行情况,比如查看CPU占用率,内存使用率等等。我们来演示一下:我们可以看到39331这个进程占用率最高,占用率为0.7%接着我们执行top -Hp 30331然后就可以显示出当前进程里面线程的运行信息我们可以看出来,29537这个线程是占原创 2021-10-25 23:34:49 · 418 阅读 · 0 评论 -
打通JVM调优第一条战-JVM日志
不同版本的JVM日志差异是比较大的,所以有必要专门探讨一下,首先我们先来看一下JDK 8里的JVM日志是怎么玩的。常用参数这里笔者整理了JDK8一部分相关垃圾收集和运行时的常用参数。JDK 8垃圾收集相关参数G1PrintHeapRegions、GCLogFileSize、NumberOfGCLogFiles、PrintAdaptiveSizePolicy、PrintGC、PrintGCApplicationConcurrentTime、PrintGCApplicationStoppedTime、P原创 2021-10-25 22:42:09 · 538 阅读 · 0 评论 -
JVM性能调优工具2之jcmd详解(覆盖全网最全的jcmd命令与说明文档)
上篇文章里《JVM常用性能调优工具详解1》我们已经探究了jps、jstat等监控工具,以及jinfo、jmap、jstack、jhat等故障排查工具,这里我单独拿出一篇文章,特别介绍jcmd。(因为jcmd这玩意细节太多了,整理文档就整理了好几个小时…)jcmdjcmd全称JVM Command,用于将诊断命令请求发送到正在运行的Java虚拟机,从JDK 7开始提供。使用说明命令如下:-f 从文件读取并执行命令-l 列出本机上的所有JVM进程我们先来看一下最简单的jcmd -l原创 2021-10-24 21:25:17 · 14865 阅读 · 0 评论 -
JVM常用性能调优工具详解1
前言工程学科是在不断动手的过程中来细化自己的领域,就像练武功一样,单凭着掌握一身武林绝学是远远不够的,在实战中,如何在多变的环境面前使用合适的招式,怎样出击,应该选择怎样的功法去迎击未知的对手,这往往都是经验之谈,当你踩过了无数的坑,沉淀了无数的线上问题,总结无数的经验,当问题来的时候你能拥有自己独特的见解与方案,你才能所向披靡,战无不胜。当你经验少的时候,要多学会辛苦一下自己,大不了就是比别人多干点活,通过不断编码,不断试错,你才能熟能生巧,慢慢的,我们才会从一个以苦劳展现价值的工程师,发展成一名靠经原创 2021-10-24 14:39:24 · 1721 阅读 · 0 评论