00:00
前面我们说了一下堆及堆里边的垃圾回收机制,那我们在做压力测试期间,我们就应该来监控我们堆里边的内存一些变化,包括我们一些CPU线程等指标,我们来做出相应的优化调整,那这个监控呢,我们就可以使用Java给我们提供的解cons索与解微这两个工具,而且呢,我们这个J微是我们JDK1.6以后给我们带上的这个工具,它呢相当于是升级版的解conso,也就是这两个用哪一个都行,我们一般推荐呢用解微数位,因为它里边呢比解cons conso拥有更强大的功能,包括如果运行期间我们出现一些问题,我们还可以通过它把我们当前整个运行期间的快照我们下载下来,我们再来慢慢分析,来修改我们应用,那这两个怎么用呢?我先来说解conso,我们给大家看一下,我们只需要windowsr,我们CMD,我本机呢安装了Java环境,所以呢,我们来直接敲命令解conso就行了,那我们启动解。
01:00
他的这个控制台,这个控制台呢,大家注意上来呢,提示我们要连接哪些能连接本地的和远程的,这是连接什么呢?我们看到我们这一块呢,启动的两个Java应用,一个是我们的网关,一个是我们的product application,所以我们可以来选中连接上我们的这两个,那么就能看到这一块呢,有一个gety,这一块叫gety开设和我们这个product好,比如我们来连接product,我们只需要双击连接进来以后呢,我们就相当于能监控我们这个应用里边的详细信息了,好,我们点进来,那这个应用的详细信息在概览这一块,我们可以看到堆内存的使用量,包括呢,当前的这些线程数,这是活动的线程,那我们压力测试期间,我们压力上去呢,这个线程数肯定一直在往上涨,包括呢,我们这有我们已加载的类,加载了一万多个,还有我们CPU的占用率,这些呢,我们都要在压力测试期间进行分析,包括这一块。
02:01
内存图里边也有详细的整个内存图表,包括这一块的图,我们看到这是我们堆内存的这一块监控,那么第一个条我们是old阵。相当于是老年代的内存,那第二个条呢,这个叫e space,这就是我们伊甸园区的那第三个内存,这关我们就看,这是survivval,我们幸存者区的,那么都知道伊甸园区空间不够了,那么可以先清理一下,存活的呢,搬到幸存者里边,如果再不够了,我们到老年代看,老年代还不够了,那我们完整都清理,所以这一块呢,我们就能看到整个流程,还有我们这一块线程监控,我们也能看到每一个县城当前的状态,以及对战跟踪信息,包括我们这一块的类信息,我们加载了多少个类,这也有。这是我们说的解锁控制台。我们在压力测试期间,要不断的结合我们这个控制台的整个监控曲线,我们来分析我们这个应用到底是哪个环节还可以再优化,或者是出现了问题,那这个解康素呢,我就关掉了,那我们还是推荐大家来用这个解微数位,因为它比这个解康素呢能更强大一点。好,我们Windows r cmd同样启动也是一样,我们使用接visual。
03:19
好,我们直接回车,我们启动它就行了,同样的我们启动的时候呢,我们在本地也一样,我们可以选择连接上某一个Java进程,我们这有一个product application,好,我们选择进去,它这个进程号呢,PID19476,我们连接进来以后呢,这一块的信息其实比解康素呢能更详细一点,它里边还有它的一些GVM参数,包括当前的一些系统变量属性,这都有。然后呢,我们在监视里边之前的效果,这也有,我们可以监视到CPU的情况,包括呢,监视到我们整个堆的信息,包括JAVA8以后,我们有圆空间,这个圆空间其实就直接定位到物理内存的这个信息,包括呢,我们还可以监控到我们整个线程数,我们当时当前活动了多少个线程,包括总共启动了多少个线程等等。这都有。
04:10
包括我们这一块还有更详细的信息,那在线程这一块有各种不同颜色的标识,比如我们这个绿颜色,那就代表我们正在运行中的线程,还有我们这个子颜色,它代表叫休眠,休眠呢,那就对应的是我们调用了sleep方法,比如我们这些正在睡眠的这些线程,包括呢,还有我们这个等待,等待呢,那就是我们调用了whitet,那在这等待被唤醒的,还有我们这一块叫驻留,驻留呢,这其实就是我们线程池里边那些空闲的线程,我们放在这儿可以等待来接收我们新任务的,这是我们说的驻留,还有我们这一块红颜色的这个监视,这个监视呢,那就是说明我们这两几个线征呢,可能发生了锁的竞争,它在这儿呢,在正在等待锁的释放,这就是我们这几个状态,那这几个状态呢,也比较重要,我们在运行期间可能经常要监控,我们可以也给大家放在这儿来说一下,那线程里边呢,这几个状态我们能看到其中运行。
05:11
那就是我们正在运行中的携程正在运行的,然后呢,还有我们这个休眠,休眠呢就相当于大家调用了sleep方法的,然后还有我们这个等待,那就是调用了外的可以等待被唤醒的,还有我们这个叫驻流,它指的就是我们这个线程池,线程池里边的空闲线程。他现在呢,什么事都没做,就在等待新的任务过来,还有我们这个监视,大家先对这些呢有一个大致的理解,这监视呢,就是我们正在阻塞的线程的线程,那正在等待锁的。线程,那么正在相当于我们正在等待锁的,正在等待锁的,所以呢,这是我们说里边的这些线程,包括我们还能监控更多的,这还有一些抽样器,还有profile等等等等,那我们重要的是呢,我们还要监控我们内存的这些垃圾回收等等,这些东西它默认呢,我们还监控不到这些,我们得安装一些插件,这个插件呢,我们可以在工具,在插件里边,我们可以来安装一些插件,但这个大家呢,有时刚打开我们这个插件安装在这里块呢,你的这个插件可能没法用,比如我们在这儿来,呃,用一个安装一下。
06:29
点个最新版本,我们看到这一块会报我们这个无法连接的错误,大家可能会有这个问题,这个问题呢,我们需要解决,那就是我们这个插件中心的地址配的有问题,大家就参照我这个文档,如果你有这个问题去解决,如果你没有,也就是你在这一块在这更新的时候,我们在可用插件检查新版本的时候,你这块没有报错,那说明你是对的,那有问题的我们来解决,怎么解决呢?我们这一块相当于我们要指定对我们插件中心的这个本,那怎么指定对,我们先来打开这个网址,这是我们插件中心的这个网址,我们来把这个网址打开,那打开这个网址,在这个网址里边呢,我们来找到我们自己安装的这个JDK来Windows r cmd1定要看自己的JDK版本。我写一个Java杠。
07:17
我的这个JDK版本呢,我们现在是一个180,我们我是112,看这个小版本号,我是112,那这个112呢,我就得找我这个是JDK840~121之间,那我112在这里边,那相当于我们插件中心呢,我就用这个地址,把这个地址直接复制过来,然后呢,接下来我们在这一粘贴,这才是我们自己插件中心的点地址,但不是这个HTMMR,我们还是得进去把这个HTMMR这有一个点GC,我们直接点进去,把这个网址呢点进去,我们要复制上面的这一块,你要光复制那一块,它是复制的是HTMMR,好把上面这一块复制粘过来,一定要注意是一个update插点GC,好,我们点一个确定,这相当于我们更新了插件中心的这个位置,那更新好了以后呢,我们就可以去插件中心来下载一些我们常用的插件。
08:12
那我们接下来就在可用插件里边,比如我们来下载一下,我们主要来下载这个微首GC,我们通过它可以观测到我们整个垃圾回收的过程,我们来选择安装。好,我们来点下一步。他只要安装完了以后呢。好,我们来点击完成,这样安装完以后,我们还得把这个重启一下,我们稍等。好,那这一块只要安装完成了,我们来看一下,我把整个这个重启一下,我点一个退出,退出我们来Windows r cmd来重新进来接visual web。那么重新进来呢,我们就可以来分析我们整个的垃圾回收的过程,好,我们再直接来,我们进入这个product。在这一块呢,就会多了一个叫微首GC,在这一块呢,我们就能看到整个我们的GC过程,这GC过程O的这一块,那这就是老年代,那我们这两块,这就是我们的新生代,新生代的上面这一块,这是我们的伊甸园区,那这个S0S1,这就是我们幸存者区,那么就可以实时的观察到我们整个垃圾回收的过程,把我们看到这比如g c time,我们发生GC的时间,总共呢,发生了2019次,我们这个GC花了六秒,包括呢,我们这个GC,还有这个伊甸园区,它的这个GC呢,是2106次GC,它主要花了六秒二八,而我们这个老年代,老年代发生了三次GC,它消耗了419,所以大家会发现我们这个新生代的这一块GC就是算2000多次,总共呢也才六秒,而现在呢,这一块老年代不到三五次,那就已经有半秒的时间了。
09:59
所以我们在线上应用一定要避免我们这个频繁的进行for GC,我们在这一块呢,都可以观察到整个动态图,而这个动态图呢,实时曲线在这一块也有,而这个曲线呢,其实是一个非常健康的曲线,因为当我们这个伊甸园区满了以后,我们咔一清理又没了,我们伊甸园区只要一买卡,一清理全部都没了,包括我们这个老年代的这块内存,我们都是慢慢慢慢才往上涨,直到什么时候老年代全部长满,我们就要进行一次for GC。
10:30
那这个Meta space,这就是我们的原空间,这就是我们说的直接操作物理内存的,那最大都要1.04个G,这里面呢,我们GC不用关心,所以呢,安装了我们这个插件以后,我们就可以来实时的观察到我们整个GC的流程,所以我们在压力测试期间,不仅要观察GC,我们也要在这观察我们整个堆的内存情况,使用的以及堆总共的大小,包括我们的线程情况,以及我们CPU的使用情况,来看一下当前应用到底是卡在CPU的计算了。
11:04
还内存经常容易买,还是我们这个线程数不够,它运行太慢了等等等等,那如果像我们这种情况,CPU呢,一直零点几的使用率,说明CPU太闲了,所以我们优化期间呢,我们就要衡量这些指标。那这就是我们说的这两个工具,那么下节课呢,结合压力测试,我们来做一个实时的分析。
我来说两句