Mark

JVM GC耗时频频升高,这次排查完想说:还有谁?

喜你入骨 提交于 2020-12-22 04:58:31
来源:https://blog.csdn.net/flysqrlboy/article/details/88679457 1. 背景 1.1 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 分析前的一些JVM背景知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次Minor GC仍然存活的对象,就会被放到老年代。Major GC针对的是老年代的垃圾回收。本文重点分析的CMS就是一种针对老年代的垃圾回收算法。另外Full GC是针对整堆(包括新生代和老年代)做垃圾回收的。 永久代(Perm) 主要存放已被虚拟机加载的类信息,常量,静态变量等数据。该区域对垃圾回收的影响不大,本文不会过多涉及。 2.2 CMS垃圾回收的6个重要阶段 initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。 concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发

JVM GC耗时频频升高,我来教你排查

好久不见. 提交于 2020-12-22 00:13:32
1. 背景 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次Minor GC仍然存活的对象,就会被放到老年代。Major GC针对的是老年代的垃圾回收。本文重点分析的CMS就是一种针对老年代的垃圾回收算法。另外Full GC是针对整堆(包括新生代和老年代)做垃圾回收的。 永久代(Perm) 主要存放已被虚拟机加载的类信息,常量,静态变量等数据。该区域对垃圾回收的影响不大,本文不会过多涉及。 2.2 CMS垃圾回收的6个重要阶段 1、initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。 2、concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。 3、concurrent-preclean 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中

hdparm 命令使用;关闭硬盘 HDD cache; 硬盘读写性能测试;

半世苍凉 提交于 2020-12-21 07:54:59
最新需要使用硬盘做一些测试,需要使用到hdparm工具,并进行了解,并进行简要记录; hdparm、dd、fio、都是很好的硬盘测试软件;通常使用其对硬盘信息做基本了解; 关闭硬盘写Cache用例: hdparm -W /dev/ sdh # 查看写缓存状态; hdparm -W 0 /dev/ sdh # 关闭Cache,保证数据强一致性;放置断电时数据未落盘; hdparm -W 1 /dev/sdh # 打开 测试磁盘和磁盘缓存读取速度: 查看磁盘信息: fdisk -l /dev/ sdh hdparm /dev/sdh 评估磁盘读取速度: hdparm -t /dev/sdh 评估磁盘缓存读取速度: hdparm -T /dev/sdh 直接测试硬盘的读性能(绕过内核页缓存): hdparm -tT --direct /dev/sdh 顺序写测试: time -p bash -c "dd if=/dev/urandom of=./dd.log bs=1M count=50000" 随机写测试(使用direct标识,绕过页缓存): fio -filename=randw-singlethread -fallocate=none -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=32k -size

Vivado与SDK的联合调试方法-使用ILA

家住魔仙堡 提交于 2020-12-20 07:10:48
首先介绍一下我的硬件平台:使用的开发板为米联客出的MIZ702,这个开发板与ZedBoard是兼容的。 Vivado硬件调试有几种手段:ILA(集成逻辑分析器Integrated Logic Analyzer)、VIO(虚拟I/O Virtual Input/Output)、Jtag-to-AXI等,本方法主要使用了ILA 。 本实验系统使用了两种调试手段:ILA和VIO,ILA的引入方式又用了两种,一种是标记Debug mark,一种是添加ILA_IP两种方式我认为是一致的。其中ILA-IP抓取的LED的寄存器的波形,而Debug mark标记的是接到一个自主IP的AXI总线系统的Block Design如下图 联调步骤: STEP1:在block design设计完系统硬件后,点击想要抓取波形的网络,右击选择mark debug,此时网络两端会显示一个Debug标识如下图,保存。 还有另外一种方法:直接添加ILA ip,设置好抓取波形的个数与每组波形的位宽,连接自己想要观测的总线,在这里我抓取的波形是一组8位的寄存器,所控制的是8个LED灯。如下两图 我认为这两种方法没有区别 STEP2:对工程进行综合,综合完成后查看综合结果,可以看到下面的debug窗口中有未连接的Debug nets,点击Set up Debug并进行相关配置完成Debug nets的连接。完成后如下图所示

利用Veeam保护SAP HANA数据库

家住魔仙堡 提交于 2020-12-19 06:48:58
利用Veeam保护SAP HANA数据库 前言 针对越来越多的SAP HANA备份需求,我们Team翻译、整理、借鉴了Veeam 的SAP HANA 大神 Clemens Zerbe 和 Ali Salman 的文章,本着力求实用的原则。希望能给我们中国的Partner一些实际的帮助,本文会在以后以多个章节的形式进行体现。 <a name="1.1.1">本文主要内容</a> SAP HANA 介绍 关于SAP HANA 常用术语 关于SAP HANA 体系架构 SAP HANA 备份的重要性 Veeam Plug-in for SAP HANA Veeam 通过SAP HANA认证 Veeam SAP HANA插件介绍 Veeam SAP HANA插件安装过程 Veeam SAP HANA插件配置过程 用Veeam进行SAP HANA 的备份 用Veeam进行SAP HANA的还原 有价值的白皮书推荐阅读 本文的原文链接 <a name="1.2">SAP HANA 介绍</a> SAP HANA 是个内存数据平台,可以在本地数据中心,物理和虚拟化和公有云平台中实施。HANA High-performance ANalytical Appliance)是高性能分析设备的缩写,其设计目的是使分析应用程序更快,使 企业级用户在全球范围内更方便地使用SAP HANA,SAP

Oracle form 代码控制控件属性函数大全

老子叫甜甜 提交于 2020-12-18 17:52:01
需求:实现tab页的实时隐藏和显示 实现:SET_TAB_PAGE_PROPERTY('MAIN_TAB.RETS_PAGE',VISIBLE,property_off);/SET_TAB_PAGE_PROPERTY('MAIN_TAB.RETS_PAGE',VISIBLE,property_on); 以下为转载内容,Oracle提供了各种代码设置属性的函数,参数可以到form builder的联机帮助里面查找,原博客地址:http://blog.csdn.net/pan_tian/article/details/8434666 Build-In List · SET_APPLICATION_PROPERTY · SET_BLOCK_PROPERTY · SET_CANVAS_PROPERTY · SET_FORM_PROPERTY · SET_ITEM_PROPERTY · SET_ITEM_INSTANCE_PROPERTY · SET_LOV_PROPERTY · SET_MENU_ITEM_PROPERTY · SET_PARAMETER_ATTR · SET_RADIO_BUTTON_PROPERTY · SET_RECORD_PROPERTY · SET_RELATION_PROPERTY · SET_REPORT_OBJECT_PROPERTY · SET_TAB

Java并发编程-synchronized

心不动则不痛 提交于 2020-12-18 02:16:48
1、 为什么会用到 synchronized   Java语言的一个高级特性就是支持多线程,线程在操作系统的实现上,可以看成是轻量级的进程,同一进程中的线程都将共享进程的内存空间,所以Java的多线程在共享JVM的内存空间。JVM的内存空间主要分为:程序计数器、虚拟机栈、本地方法栈、堆、方法区和运行时常量池。   在这些内存空间中,我们重点关注栈和堆,这里的栈包括了虚拟机栈和本地方法栈(实际上很多JVM的实现就是两者合二为一)。在JVM中,每个线程有自己的栈内存,其他线程无法访问该栈的内存数据,栈中的数据也仅仅限于基本类型和对象引用。在JVM中,所有的线程共享堆内存,而堆上则不保存基本类型和对象引用,只包含对象。除了重点关注的栈和堆,还有一部分数据存放在方法区,比如类的静态变量,方法区和栈类似,只能存放基本类型和对象引用,不同的是方法区是所有线程共享的。   如上所述,JVM的堆(对象信息)和方法区(静态变量)是所有线程共享的,那么多线程如果访问同一个对象或者静态变量时,就需要进行管控,否则可能出现无法预测的结果。为了协调多线程对数据的共享访问,JVM给每个对象和类都分配了一个锁,同一时刻,只有一个线程可以拥有这个对象或者类的锁。JVM中锁是通过监视器(Monitors)来实现的,监视器的主要功能就是监视一段代码,确保在同一时间只有一个线程在执行。每个监视器都和一个对象关联

程序员需要了解的硬核知识之CPU

我怕爱的太早我们不能终老 提交于 2020-12-17 07:59:34
这是 Java 建设者的第 39 篇原创文章 大家都是程序员,大家都是和计算机打交道的程序员,大家都是和计算机中软件硬件打交道的程序员,大家都是和 CPU 打交道的程序员,所以,不管你是玩儿硬件的还是做软件的,你的世界都少不了计算机最核心的 - CPU CPU是什么 CPU 的全称是 Central Processing Unit ,它是你的电脑中最 硬核 的组件,这种说法一点不为过。 CPU 是能够让你的计算机叫 计算机 的核心组件,但是它却不能代表你的电脑,CPU 与计算机的关系就相当于大脑和人的关系。 它是一种小型的计算机芯片,它嵌入在台式机、笔记本电脑或者平板电脑的主板上。 通过在单个计算机芯片上放置数十亿个微型晶体管来构建 CPU。 这些晶体管使它能够执行运行存储在系统内存中的程序所需的计算,也就是说 CPU 决定了你电脑的计算能力。 CPU 实际做什么 CPU 的核心是从程序或应用程序获取指令并执行计算。 此过程可以分为三个关键阶段: 提取,解码和执行 。 CPU从系统的 RAM 中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。 RAM : 随机存取存储器(英语: Random Access Memory,缩写: RAM ),也叫主存,是与 CPU 直接交换数据的内部存储器。 它可以随时读写(刷新时除外),而且速度很快

面试官还敢问你JVM调优问题,把这篇文章甩给他!

淺唱寂寞╮ 提交于 2020-12-16 16:55:32
目录 JVM调优 概念 基本垃圾回收算法 垃圾回收面临的问题 分代垃圾回收详述1 分代垃圾回收详述2 典型配置举例1 典型配置举例2 新一代的垃圾回收算法 调优方法 反思 一、JVM调优的一些概念 数据类型 Java虚拟机中,数据类型可以分为两类: 基本类型 和 引用类型 。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress 引用类型包括: 类类型 , 接口类型 和 数组 。 堆与栈 堆和栈是程序运行的关键,很有必要把他们的关系说清楚。 Java对象的大小 基本数据的类型的大小是固定的,这里就不多说了。对于非基本类型的Java对象,其大小就值得商榷。 在Java中, 一个空Object对象的大小是8byte ,这个大小只是保存堆中一个没有任何属性的对象的大小。看下面语句: Object ob = new Object(); 这样在程序中完成了一个Java对象的生命,但是它所占的空间为: 4byte+8byte 。4byte是上面部分所说的Java栈中保存引用的所需要的空间。而那8byte则是Java堆中对象的信息

扫描线——POJ1151

此生再无相见时 提交于 2020-12-13 07:06:37
平面上有若干个矩形,求矩形相互覆盖的面积。为方便起见,矩形的边均平行于坐标轴。 我们根据 容斥原理 , 矩形相互覆盖的面积 即为 所有矩形的面积和 减去 所有矩形所覆盖的面积 即可。 而现在问题是 如何求得所有矩形所覆盖的面积 。即 让我们人类去做,由于这是个由矩形拼接成的多边形,很难去直接求它的面积,求该图形的面积一个常规的方法就是 割补法 。 此处我们采用割,割成一个一个矩形出来。 这样就很方便地去求了。 计算机无法直观地看出图形,进而去求出长宽进而求出矩形面积。 那该如何让计算机来求? 我们看这些图形, 一块一块 的,最下面的一块,可以想象成原矩形 下面矩形最下面的边,向上平移时“ 刷 ”出来的紫矩形,当碰到上面矩形的底边时,两条边 合并 ,再向上平移时“ 刷 ”出红色矩形,然后碰到下面矩形的顶边,去掉了顶边对应的底边,因为两边重合的部分有两条边贡献,所以去掉顶边线段后,重合部分还在,继续向上平移,“ 刷 ”出了蓝色矩形。 有序,易行,计算机可做! 其实这就是扫描线在干的事,一条透明的线从下向上平移,遇到底边,则扫描线在底边所在的范围有了颜色,这样向上平移的时候就“ 刷 ”出了颜色,遇到顶边,则扫描线在顶边的范围就没了颜色,之后该部分就没有颜色了。 所以现在的问题是, 如何维护扫描线 。 即我们要维护, 扫描线有底边贡献的范围 ,以及 该范围被几条底边所贡献 ,且