JVM 不同垃圾回收器的日志格式分析

news2024/11/24 0:51:57

1、GC日志采集

在服务器上我们需要配置一些参数才能采集到历史的GC日志信息,这些参数通常在项目启动的时候就需要指定,

如果你项目是jar包,可以按照下面方式指定这些GC参数即可。

下面这些参数意思是把GC日志记录到/opt/app/abc-user/ard-user-gc-%t.log 这个文件里,每个文件大小为20M,一共生成5个文件,超过的话则覆盖。

 java  -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation  -XX:+PrintHeapAtGC -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M    -Xloggc:/opt/ard-user-gc-%t.log  -jar abg-user-1.0-SNAPSHOT.jar 

-Xloggc:/opt/app/ard-user/ard-user-gc-%t.log 设置日志目录和日志名称
-XX:+UseGCLogFileRotation 开启滚动生成日志
-XX:NumberOfGCLogFiles=5 滚动GC日志文件数,默认0,不滚动
-XX:GCLogFileSize=20M
GC文件滚动大小,需开启UseGCLogFileRotation
-XX:+PrintGCDetails
开启记录GC日志详细信息(包括GC类型、各个操作使用的时间),并且在程序运行结束打印出JVM的内存占用情况
-XX:+PrintGCDateStamps 记录系统的GC时间
-XX:+PrintGCCause 产生GC的原因(默认开启)

2、Ps+Po日志解析

ParallelScavenge + Parallel Old日志主要会包括下面几类信息:

1、GC类型: 这里会告诉我们产生的是YGC (YGC 代表新生代的GC只会收集Eden区和Survivor )、 还是Full GC(Full GC是针对于整个堆进行搜集)

2、GC产生的原因:这里一般都会告诉我们是因为什么原因导致产生GC,一般通过这里可以分析出具体是因为哪个区域空间不够了导致的GC。

3、回收的情况:这里主要体现出回收的成果,通过数据告诉我们 回收之前的区域对象占用空间大小、回收之后区域对象占用空间的大小 、当前区域的空间大小、回收使用的时长。

下面是一段ParallelScavenge + Parallel Old 组合的 Full GC 日志信息:

在这里插入图片描述
下面我们针对一段Full GC日志来逐一对说明对应的内容所表示的信息进行说明。

在这里插入图片描述

3、CMS日志解析

如果老年代采用的CMS收集器,那么JVM默认会选择ParNew作为新生代收集器与CMS配合。所以使用CMS后主要是有两种日志类型,一种是ParNew的新生代收集日志,一种是CMS的老年代收集日志。

新生代GC日志(PaNew)

在这里插入图片描述

老年代的GC日志(CMS)

CMS日志和之前PS+PO的日志有很大区别,主要是CMS收集机制与之前的收集器不一样,CMS根据阶段来记录GC日志的,GC日志主要分为6个阶段。

//第一阶段 初始标记,CMS的第一个STW阶段,这个阶段会所有的GC Roots进行标记。
 2020-10-20T17:04:45.424+0800: 10.756: [GC (CMS Initial Mark) [1 CMS-initial-mark: 68287K(68288K)] 69551K(99008K), 0.0019516 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
 解析:CMS Initial Mark 说明该阶段为初始标记阶段,68287K(68288K)当前老年代空间的用量和总量,69551K(99008K)当前堆空间的用量和总量,0.0019516 secs初始化标记所耗费的时间。
 ​
 ​
 //第二阶段并发标记
 2020-10-20T17:04:45.426+0800: 10.758: [CMS-concurrent-mark-start]
 2020-10-20T17:04:45.519+0800: 10.850: [CMS-concurrent-mark: 0.092/0.092 secs] [Times: user=0.56 sys=0.01, real=0.09 secs]
 解析:CMS-concurrent-mark: 0.092/0.092 secs] 并发标记所所耗费的时间
 ​
 ​
 //第三阶段 并发预清理阶段,并发执行的阶段。在本阶段,会查找前一阶段执行过程中,从新生代晋升或新分配或被更新的对象。通过并发地重新扫描这些对象,预清理阶段可以减少重新标记阶段的工作量。
 2020-10-20T17:04:45.519+0800: 10.850: [CMS-concurrent-preclean-start]
 2020-10-20T17:04:45.598+0800: 10.930: [CMS-concu解析rrent-preclean: 0.080/0.080 secs] [Times: user=0.46 sys=0.00, real=0.08 secs]
 解析: [CMS-concurrent-preclean: 0.080/0.080 secs] 预清阶段所使用功能的时间。
 ​
 ​
 //第四阶段 并发可中止的预清理阶段。这个阶段工作和上一个阶段差不多。增加这一阶段是为了让我们可以控制这个阶段的结束时机,比如扫描多长时间(默认5秒)或者Eden区使用占比达到期望比例(默认50%)就结束本阶段。
 2020-10-20T17:04:45.599+0800: 10.930: [CMS-concurrent-abortable-preclean-start]
 2020-10-20T17:04:45.599+0800: 10.930: [CMS-concurrent-abortable-preclean: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
 ​
 ​
 //第五阶段 重新标记阶段,需要STW,从GC Root开始重新扫描整堆,标记存活的对象。需要注意的是,虽然CMS只回收老年代的垃圾对象,但是这个阶段依然需要扫描新生代,因为很多GC Root都在新生代。
 2020-10-20T17:04:45.608+0800: 10.939: [GC (CMS Final Remark) [YG occupancy: 25310 K (30720 K)]2020-10-20T17:04:45.608+0800: 10.939: [Rescan (parallel) , 0.0117481 secs]2020-10-20T17:04:45.620+0800: 10.951: [weak refs processing, 0.0000354 secs]2020-10-20T17:04:45.620+0800: 10.951: [class unloading, 0.0268352 secs]2020-10-20T17:04:45.647+0800: 10.978: [scrub symbol table, 0.0053781 secs]2020-10-20T17:04:45.652+0800: 10.983: [scrub string table, 0.0006005 secs][1 CMS-remark: 68287K(68288K)] 93598K(99008K), 0.0447563 secs] [Times: user=0.18 sys=0.00, real=0.04 secs]
 解析:
  [YG occupancy: 25310 K (30720 K)] =》 新生代空间占用大小,新生代总大小。
 [Rescan (parallel) , 0.0117481 secs] =》 暂停用户线程的情况下完成对所有存活对象的标记,此阶段所花费的时间。
 [weak refs processing, 0.0000354 secs] =》第一步 标记处理弱引用;
 [class unloading, 0.0033120 secs] =》 第二步,标记那些已卸载未使用的类;
  [scrub symbol table, 0.0053781 secs][scrub string table, 0.0004780 secs =》 最后标记未被引用的常量池对象。
  [1 CMS-remark: 68287K(68288K)] 93598K(99008K), 0.0447563 secs] =》 重新标记完成后 老年代使用量与总量,堆空间使用量与总量。
  [Times: user=0.18 sys=0.00, real=0.04 secs] =》 各个维度的时间消耗。
 ​
 ​
  //第六阶段 并发清理阶段, 对前面标记的所有可回收对象进行回收
 2020-10-20T17:04:45.653+0800: 10.984: [CMS-concurrent-sweep-start]
 2020-10-20T17:04:45.689+0800: 11.020: [CMS-concurrent-sweep: 0.036/0.036 secs] [Times: user=0.20 sys=0.01, real=0.04 secs]
 2020-10-20T17:04:45.689+0800: 11.020: [CMS-concurrent-reset-start]
 2020-10-20T17:04:45.689+0800: 11.021: [CMS-concurrent-reset: 0.000/0.000 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
 解析:
 [CMS-concurrent-sweep: 0.036/0.036 secs]  开并发清理所耗费的时间。
 [CMS-concurrent-reset: 0.000/0.000 secs]  重置数据和结构信息。

3、G1日志解析

G1会有3种类型的GC,YGC(只会对新生代空间进行GC)、Miexd GC(混合GC,对新生代和部分老年代进行GC)、FGC(Full FC ,对整堆进行GC)。

Young GC日志对新生代内存空间进行回收。

2020-10-20T20:06:24.845+0800: 3.927: [GC pause (G1 Evacuation Pause) (young), 0.0142232 secs]     //GC发生的系统时间,GC发生在程序启动后的多少秒后产生的GC。
 //该GC产生STW(由对象复制空间不足造成的STW)(发生在young区),整个阶段的耗时。
  
  //下面是整个GC细节过程的耗时情况
  [Parallel Time: 12.9 ms, GC Workers: 8]        // 开启了8个GC线程            
       [GC Worker Start (ms): Min: 3926.9, Avg: 3934.2, Max: 3939.7, Diff: 12.8] // 工作线程启动时间
       [Ext Root Scanning (ms): Min: 0.0, Avg: 0.3, Max: 2.5, Diff: 2.5, Sum: 2.6] //扫描root的耗时
       [Update RS (ms): Min: 0.0, Avg: 0.3, Max: 2.1, Diff: 2.1, Sum: 2.1]    //更新RS的耗时
          [Processed Buffers: Min: 0, Avg: 1.9, Max: 15, Diff: 15, Sum: 15]   
       [Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.0, Sum: 0.1]     //扫描RS的耗时
       [Code Root Scanning (ms): Min: 0.0, Avg: 0.1, Max: 0.6, Diff: 0.6, Sum: 0.6]  //
       [Object Copy (ms): Min: 0.0, Avg: 4.5, Max: 7.1, Diff: 7.1, Sum: 35.9] //对象拷贝耗时
       [Termination (ms): Min: 0.0, Avg: 0.4, Max: 0.5, Diff: 0.5, Sum: 2.9]
          [Termination Attempts: Min: 1, Avg: 74.2, Max: 133, Diff: 132, Sum: 594]
       [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1] 
       [GC Worker Total (ms): Min: 0.0, Avg: 5.5, Max: 12.8, Diff: 12.8, Sum: 44.3]
       [GC Worker End (ms): Min: 3939.7, Avg: 3939.7, Max: 3939.8, Diff: 0.0]
    [Code Root Fixup: 0.0 ms]
    [Code Root Purge: 0.0 ms]
    [Clear CT: 0.3 ms]
    [Other: 1.1 ms]          //其它任务的耗时
       [Choose CSet: 0.0 ms]  //CSet选择Region的时间
       [Ref Proc: 0.7 ms]    //处理对象引用的时间
       [Ref Enq: 0.0 ms]     //引用入ReferenceQueues队列的时间
       [Redirty Cards: 0.2 ms]
       [Humongous Register: 0.0 ms]
       [Humongous Reclaim: 0.0 ms]
       [Free CSet: 0.0 ms]               //释放CSet时间
    
   
   [Eden: 52.0M(52.0M)->0.0B(52.0M) Survivors: 8192.0K->8192.0K Heap: 74.2M(100.0M)->25.6M(100.0M)]
   Eden 回收前用量(总容量)->回收后用量(总容量),Survivors区回收前用量-回收后用量, 堆内存回收前用量(总容量)->回收后用量(总容量)

Miexd GC日志

Miexd GC回收整个新生代和部分老年代。

2020-10-20T20:06:25.068+0800: 4.151: [GC pause (Metadata GC Threshold) (young) (initial-mark), 0.0076494 secs]
 //GC产生STW(Metadata空间不足引起的GC)(initial-mark 说明整个GC属于混合GC,YGC和初始化标记阶段同时进行)。
 ​
 //下面和YGC一样,是整个GC细节过程的耗时情况,
    [Parallel Time: 6.1 ms, GC Workers: 8]
       [GC Worker Start (ms): Min: 4150.8, Avg: 4150.9, Max: 4151.0, Diff: 0.1]
       [Ext Root Scanning (ms): Min: 0.6, Avg: 2.3, Max: 5.8, Diff: 5.2, Sum: 18.3]
       [Update RS (ms): Min: 0.0, Avg: 0.5, Max: 0.8, Diff: 0.8, Sum: 4.2]
          [Processed Buffers: Min: 0, Avg: 2.2, Max: 7, Diff: 7, Sum: 18]
       [Scan RS (ms): Min: 0.0, Avg: 0.1, Max: 0.2, Diff: 0.2, Sum: 0.5]
       [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.3, Diff: 0.3, Sum: 0.3]
       [Object Copy (ms): Min: 0.0, Avg: 2.7, Max: 4.2, Diff: 4.2, Sum: 21.8]
       [Termination (ms): Min: 0.0, Avg: 0.2, Max: 0.2, Diff: 0.2, Sum: 1.3]
          [Termination Attempts: Min: 1, Avg: 4.6, Max: 11, Diff: 10, Sum: 37]
       [GC Worker Other (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.1]
       [GC Worker Total (ms): Min: 5.8, Avg: 5.8, Max: 5.9, Diff: 0.1, Sum: 46.6]
       [GC Worker End (ms): Min: 4156.7, Avg: 4156.7, Max: 4156.7, Diff: 0.0]
    [Code Root Fixup: 0.0 ms]
    [Code Root Purge: 0.0 ms]
    [Clear CT: 0.2 ms]
    [Other: 1.3 ms]
       [Choose CSet: 0.0 ms]
       [Ref Proc: 1.0 ms]
       [Ref Enq: 0.0 ms]
       [Redirty Cards: 0.2 ms]
       [Humongous Register: 0.0 ms]
       [Humongous Reclaim: 0.0 ms]
       [Free CSet: 0.0 ms]
    [Eden: 50.0M(52.0M)->0.0B(53.0M) Survivors: 8192.0K->7168.0K Heap: 75.1M(100.0M)->28.6M(100.0M)]
 Heap after GC invocations=6 (full 0):
  garbage-first heap   total 102400K, used 29326K [0xdf000000, 0xdf100190, 0xe5400000)
   region size 1024K, 7 young (7168K), 7 survivors (7168K)
  Metaspace       used 16139K, capacity 16346K, committed 16384K, reserved 16688K
 }
  [Times: user=0.03 sys=0.00, real=0.01 secs] 
  
 ​
 //初始标记阶段STW
 2020-10-20T20:06:25.076+0800: 4.159: [GC concurrent-root-region-scan-start]
 2020-10-20T20:06:25.080+0800: 4.162: [GC concurrent-root-region-scan-end, 0.0039639 secs]
 ​
 //并发标记阶段
 2020-10-20T20:06:25.080+0800: 4.163: [GC concurrent-mark-start]
 2020-10-20T20:06:25.097+0800: 4.180: [GC concurrent-mark-end, 0.0170679 secs]
 ​
 //最终标记阶段STW
 2020-10-20T20:06:25.098+0800: 4.180: [GC remark 2020-10-20T20:06:25.098+0800: 4.180: [Finalize Marking, 0.0005518 secs] 2020-10-20T20:06:25.098+0800: 4.180: [GC ref-proc, 0.0003269 secs] 2020-10-20T20:06:25.098+0800: 4.181: [Unloading, 0.0040534 secs], 0.0052224 secs]
  [Times: user=0.02 sys=0.00, real=0.00 secs] 
  
  //筛选回收阶段STW
 2020-10-20T20:06:25.103+0800: 4.185: [GC cleanup 32M->30M(100M), 0.0008868 secs]
  [Times: user=0.00 sys=0.00, real=0.01 secs] 
 2020-10-20T20:06:25.104+0800: 4.186: [GC concurrent-cleanup-start]
 2020-10-20T20:06:25.104+0800: 4.186: [GC concurrent-cleanup-end, 0.0000233 secs]
  字段解析:
  [GC cleanup 32M->30M(100M), 0.0008868 secs] 回收前用量->回收之后用量(总容量)

Full GC日志 回收整个堆,包括新生代、老年代、元空间等 。

//回收前内存占情况
 Heap before GC invocations=297 (full 0):
  garbage-first heap   total 102400K, used 102278K [0xdf000000, 0xdf100190, 0xe5400000)
   region size 1024K, 0 young (0K), 0 survivors (0K)
  Metaspace       used 33404K, capacity 33769K, committed 33920K, reserved 34096K]
  字段解析:
   heap   total 102400K  used 102278K [0xdf000000, 0xdf100190, 0xe5400000)  => 堆空间总大小 已使用大小
 内存空间开始位置、已使用空间位置,结束位置。
 ​
   region size 1024K, 0 young (0K), 0 survivors (0K) => 单个region 大小,
   Metaspace       used 33404K, capacity 33769K, committed 33920K, reserved 34096K]
   
   
  //FGC 详情
 2020-10-20T20:06:34.447+0800: 13.529: [Full GC (Allocation Failure)  99M->74M(100M), 0.3039405 secs]
    [Eden: 0.0B(5120.0K)->0.0B(13.0M) Survivors: 0.0B->0.0B Heap: 99.9M(100.0M)->74.0M(100.0M)], [Metaspace: 33404K->33307K(34096K)]
  字段解析:
  [Full GC (Allocation Failure) =》 GC类型为Full GC, 原因是分配内存失败导致的Full GC。
   99M->74M(100M), 0.3039405 secs]  =》 回收前堆内空间占用量,回收后堆内存占用量(堆内存总量),耗费时间。
  [Eden: 0.0B(5120.0K)->0.0B(13.0M) =》 回收前eden区空间用量(总量),回收后Eden区空间用量(总量)。
   Survivors: 0.0B->0.0B  =》   回收前Survivorsn区空间用量),回收后Survivors区空间用量)。
   Heap: 99.9M(100.0M)->74.0M(100.0M)] =》 回收前堆空间用量(总量),回收后堆空间用量(总量)
 [Metaspace: 33404K->33307K(34096K)] =》 回收前元数据空间用量,回收后元数据空间用量(总量)
   
   
  //回收后内存占用情况
 Heap after GC invocations=298 (full 1):
  garbage-first heap   total 102400K, used 75785K [0xdf000000, 0xdf100190, 0xe5400000)
   region size 1024K, 0 young (0K), 0 survivors (0K)
  Metaspace       used 33307K, capacity 33649K, committed 33920K, reserved 34096K
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯备赛——Echarts学习

文章目录前言学习 ECharts 的方法快速上手基础知识option 配置选项可选配置title 标题组件tooltip 提示框组件axisPointer 坐标轴指示器legend 图例组件toolbox 工具栏坐标轴xAxis和yAxisseries ([ ]用数组表示,数组里是一个个数据对象)饼状图散点图交互…

盘点代码情诗集合❤,程序员表白的巅峰之作,特此奉献

程序员怎么表白?写代码啊!每到情人节,程序员们就纷纷出动,各种别出心裁的表白代码倾囊相送。我曾被大批表白代码砸晕,沉浸在“虚拟的”幸福感中不能自拔。我在众多代码中精选了以下几十条,每一条都是文学素…

Python中的遍历字典的键和值

一、Python的字典在项目的开发过程中,如果遇到有映射关系的内容可以考虑使用Python中的字典进行存储数据,字典中冒号前的数据称为【键】、冒号后的数据称为【值】。二、Python字典的用法2.1、Python的定义#Python字典的定义 字典名称{键1:值1,键2:值2,键…

JavaScript Date 日期对象

文章目录JavaScript Date 日期对象Date 对象Date 对象属性Date 对象方法创建日期设置日期两个日期比较JavaScript Date 日期对象 日期对象用于处理日期和时间。 Date 对象 Date 对象用于处理日期与实际。 创建 Date 对象: new Date(). 以上四种方法同样可以创建…

Validate端口使用手册

知行之桥EDI系统从2020版本开始引入了Validate端口,用来实现对XML数据文件进行一些规则的验证,保证XML数据文件的有效性。本文将介绍如何使用Validate端口。 端口创建 同其他功能性端口一样,只需要将Validata端口从左侧的端口清单拖拽到右侧…

子数组达到规定累加和的最大长度系列问题

文章目录1、题目一:正整数数组中子数组累加和 KKK 最大长度1.1 题目描述1.2 思路分析1.3 代码实现2、题目二:整数数组中子数组累加和为 KKK 的最大长度2.1 题目描述2.2 思路分析2.3 代码实现2.4 引申变形2.5 技巧应用题2.5.1 剑指 Offer II 010. 和为 k …

关于HTTP/3的小知识点

客户端用 TCP 发送了三个包,但服务器所在的操作系统只收到了后两个包,第一个包丢了。那么内核里的 TCP 协议栈就只能把已经收到的包暂存起来,“停下”等着客户端重传那个丢失的包,这样就又出现了“队头阻塞”。由于这种“队头阻塞…

Kubernetes之存储管理(中)

NFS网络存储 emptyDir和hostPath存储,都仅仅是把数据存储在pod所在的节点上,并没有同步到其他节点,如果pod出现问题,通过deployment会产生一个新的pod,如果新的pod不在之前的节点,则会出现问题&#xff0c…

CV——day81(1) 读论文: 基于自监督一致性学习的驾驶场景交通事故检测(有源码)

Traffic Accident Detection via Self-Supervised Consistency Learning in Driving Scenarios 基于自监督一致性学习的驾驶场景交通事故检测I. INTRODUCTIONIII. OUR APPROACHA. 帧预测B. 物体位置预测C. 驾驶场景上下文表示(DSCR)D. 协作多任务一致性学习E.交通事故判定IV. E…

UART串口通信协议

一、协议 1.1 消息格式 串口协议是一种全双工、异步通信协议,不需要同步时钟,数据的发送是一位一位的发送,完整的一帧数据通常由起始位、数据、奇偶校验位和停止位组成 1.2 波特率 为确保正确的收发信息,双方必须设置相同的波…

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 DataLeap 是火山引擎数智平台 VeDI 旗下的大数据研发治理套件产品,帮助用户快速完成数据集成、开发、运维、治理、资产、安全等全套数据中台建设&#x…

MySQL 中的锁有哪些类型,MySQL 中加锁的原则

锁的类型MySQL 找那个根据加锁的范围,大致可以分成全局锁,表级锁和行级锁。全局锁全局锁,就是对整个数据库加锁。加锁flush tables with read lock解锁unlock tables全局锁会让整个库处于只读状态,之后所有的更新操作都会被阻塞&a…

OB运维 | 连接 kill 中的 session_id

作者:姚嵩 外星人… 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 背景: 通过 obproxy 连接 OB 后,发现: kill 命令使⽤ show processli…

如何写出让人看不懂的MATLAB代码?

最近呢有不少好奇的伙伴私下问咱这是怎么实现大幅度降低matlab代码可读性。于是咱准备将相关的资源分享给大家,这个工具的根来源于大神thrynae (Rik)公开分享一款名叫minify的小工具图片。 咱也不藏着掖着,其实大家用minify作为关键词检索,不…

学生成绩管理系统/学生信息管理系统

文章目录项目介绍一、技术栈二、项目功能介绍三、功能页面展示四、获取代码项目介绍 一、技术栈 编程语言:Java 技术栈:ServletJspJdbcEasyUIjQueryAjax面向接口编程 二、项目功能介绍 用户角色:学生、教师、系统管理员。; 管…

Nuxt 3.0 全栈开发

Nuxt 3.0 全栈开发 - 杨村长 - 掘金小册核心知识 工程架构 全栈进阶 项目实战,快速精通 Nuxt3 开发!。「Nuxt 3.0 全栈开发」由杨村长撰写,299人购买https://s.juejin.cn/ds/S6p7MVo/ 这门课我会全面讲解 Nuxt3 核心知识,然后…

【uni-app教程】一、UniAPP 介绍

一、UniAPP 介绍 (1) 什么是 UniAPP? uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 iOS,Android,HS,以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉》等多个平台&#…

Docker之部署Canal

Canal 就是一个同步增量数据的一个工具。 目录概念Mysql开启binlog是否开启binlog开启binlog日志创建授权用户部署Canal拉取镜像挂载properties配置文件创建容器概念 canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数…

VTK例子--使用不同的vtkActor同时显示灰度图、体渲染、多边形

在实际项目中,常遇到不同类型的数据在同一个渲染窗口显示;如网格多边形与灰度图像的显示、体渲染与多边形的显示、体渲染与灰度图像的显示,如下面几张图的效果;多边形灰度图像体渲染多边形体渲染灰度图像如何实现这种混合显示的效…

怎么连接同局域网下的其他同事的mysql

**一、双击运行MySQL 5.5 Command Line Client。**然后输入你这个设备的MySQL的root账户密码 二、输入grant all privileges on *.* to root% identified by"root";(identified by后面的是别人要登入的密码)后回车。这样就设置局域网内所有ip都…