JProfiler

spring quartz 部分定时任务不执行问题定位修复方案

吃可爱长大的小学妹 提交于 2021-01-21 12:39:03
Quartz部分定时任务不执行问题分析过程及修复方案 背景: 2021年1月7号上线迁移需求之后,出现最为明显的 众帮文件上传 其他部分定时任务也不执行的情况 执行时间并没有按照约定时间去执行 分析1 怀疑是代码问题? 对众帮文件上传定时任务代码进行排查 并无发现编码问题,并且对1月7号上的版本 和上一个版本进行代码比对 并未发现对众邦的代码有所改动的地方 分析2 项目定时任务框架 spring quartz 内部任务存储 调度问题? Quartz 是基于RAMJobStore调度中心去调度的,里面有Job(任务),Trigger(触发器)。 通过对项目定时任务代码的了解 及源码的分析 得知: 项目启动时 会把applicationContext-quartz.xml配置文件中的所有定时任务加载到jobDefinitions 这个队列中,遍历jobDefinitions 把每个定时任务的 job 和 Trigger获取到,通过Quartz API 把定时任务添加到RAMJobStore, 经过对jobDetail的校验 ,这里主要是校验name,group,jobClass 是否为空,然后jobDetail的下次触发时间是否合法 然后添加到RAMJobStore(JobWrapper, TriggerWrapper)中。 秉着这一逻辑思想 1月14号上线 项目重启后 拉取项目

面试官问:平常你是怎么对Java服务进行调优的?

和自甴很熟 提交于 2020-12-05 02:55:43
点击关注上方“ 程序员私房菜 ”,设为“置顶或星标”,第一时间送达技术干货。 来源:http://t.cn/AiCTERJz Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。 Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层、数据库层、框架层、JVM 层 ,如图 1 所示。 图 1.Java 性能优化分层模型 每层优化难度逐级增加,涉及的知识和解决的问题也会不同。比如应用层需要理解代码逻辑,通过 Java 线程栈 定位有问题代码行等;数据库层面需要 分析 SQL、定位死锁 等;框架层需要 懂源代码 , 理解框架 机制;JVM 层需要对 GC 的类型和工作机制有深入了解,对 各种 JVM 参数 作用了然于胸。 围绕 Java 性能优化,有两种最基本的分析方法: 现场分析法和事后分析法。 现场分析法 通过保留现场,再采用诊断工具分析定位。现场分析对线上影响较大,部分场景(特别是涉及到用户关键的在线业务时)不太合适。 事后分析法 需要尽可能多收集现场数据

还怕面试官问JVM吗?

给你一囗甜甜゛ 提交于 2020-12-04 08:54:03
请你谈谈你对JVM的理解? JVM类加载器是怎么样的?有几种? 什么是OOM,什么是StackOverFlowError? 怎么分析? JVM常用调优参数有哪写? GC有几种算法?分别是怎么执行的? 你知道JProfiler吗,怎么分析Dump文件? 第一次看到这些真真实实的面试题的时候,我~ 这都什么玩意??????? 经过一段时间的研究!!接下来,我将以大白话从头到尾给大家讲讲 Java虚拟机 !! 1、什么是JVM?在哪? JVM是Java Virtual Machine(Java 虚拟机 )的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 百度的解释云里雾里,对于我们Java程序员,说白了就是: JVM本质上是一个 程序 ,它能识别 .class 字节码文件(里面存放的是我们对 .java 编译后产生的二进制代码),并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作! 关于Java语言的 跨平台性 ,就是因为JVM,我们可以将其想象为一个抽象层,只要这个抽象层JVM正确执行了 .class 文件,就能运行在各种操作系统之上了!这就是 一次编译,多次运行 对于 JVM的位置 : JVM是运行在操作系统之上的,它与硬件没有直接的交互 2、JVM、JRE、JDK 的关系 JDK(Java

定位JVM内存溢出问题思路总结

荒凉一梦 提交于 2020-11-15 05:00:48
JVM的内存溢出问题,是个常见而有时候有非常难以定位的问题。定位内存溢出问题常见方法有很多,但是其实很多情况下可供你选择的有效手段非常有限。很多方法在一些实际场景下没有实用价值。这里总结下我的一些定位思路。 要定位JVM内存溢出问题,首先要对JVM的内存布局有一定的了解,对常见的JVM内存工具要比较熟悉。所谓工欲善其事,必先利其器。而熟悉JVM的内存管理机制是你定位JVM内存问题的基石。首先介绍下JVM的内存管理机制: JAVA程序和C类程序一个重要的区别就是JAVA中的内存回收管理工作有JVM完成,而不需要为程序中的每个new/malloc去delete/free。那JVM这么智能怎么还有内存溢出问题呢,一个常见的原因是我们的JAVA程序中长时间的持有了不该持有的对象,或者申请了过多的对象使得JVM的内存不够用。 JVM管理的几个内存区域包括以下几个内存区域: 1、 方法区:用于存储JAVA类信息、常量、静态变量。这个区域也可以发生垃圾回收,比如当一些类不在被引用时JVM可以卸载这个类,不过这种回收动作很少发生。另外所有线程都共享方法区,因此线程对方法区的访问被设计为线程安全的。 2、 虚拟机栈:JAVA虚拟机栈是线程私有的,每当启动一个新线程时,JVM都会为它分配一个JAVA虚拟机栈。没当线程调用方法时,JVM都会为虚拟机栈压入一个栈帧,该栈帧用于存储参数、局部变量

是谁在调用我?使用 arthas+jprofiler 做复杂链路分析

三世轮回 提交于 2020-10-07 09:25:20
简介: Arthas 是阿里巴巴开源的应用诊断利器,提供了 profiler 命令,可以生成热点火焰图。通过采样录制调用链路来做性能分析,极大提升了线上排查性能问题的效率。 作者 | 羽涅 阿里巴巴 CCO 技术部技术专家,承担 CCO 技术部架构治理、基础技术能力建设方面工作,热衷开源技术,喜欢折腾电子产品。 【Arthas 官方社区正在举行征文活动,参加即有奖品拿~ 点击投稿 】 背景 Arthas 是阿里巴巴开源的应用诊断利器,提供了 profiler 命令,可以生成热点火焰图。通过采样录制调用链路来做性能分析,极大提升了线上排查性能问题的效率。 但是有一个问题,当 async-profiler 全量采样导出的 svg 文件太大时,想要找到关键的调用点,就非常困难。 比如下图: 没有办法做聚合或过滤,这方面本地的 profiler 工具比如 jprofiler、yourkits 就方便很多,有没有办法将两者结合起来呢? 经过分析发现,async-profiler 支持 jfr (Java Flight Recorder) 格式输出,jprofiler 也支持打开 jfr 快照,成了!具体操作步骤如下: 1. arthas 采样生成 jfr 文件 启动 arthas 之后,执行以下采样命令: profiler start -f /home/admin/yourAppName

看过很多的JVM文章,实战中却依然不知道如何进行分析排查?

五迷三道 提交于 2020-10-02 03:09:15
  今天面了个32岁的Java程序员,各方面都挺好,问啥都会,对于JVM调优问题,答得还行,最后问了个Go语言GC问题,就答不上来了,走时几乎落泪...唉!    细想想...   当面试官向你提问JVM的实战问题时,你是否感觉到无所适从?   想解决生产环境中的GC问题,你是否感觉到狗咬刺猬,无处下嘴?   面对JVM的海量参数,你是否感觉到迷茫无助?   看过很多的JVM文章,但当遇到了生产环境中真实问题的时候,你是否依然不知道如何进行分析排查?   如果是这样,我觉得我们大家先想清楚在 金九银十 这个时间段“ 自己想要什么 ”最为重要   我认为是 “ 实 战” !    “实战” 可以让我们 快速消除痛点,解决面试,积累实战经验 。   在这里小编推荐你,拿出2小时的时间   赶紧参加【 马士兵 老师】的 「JVM实战调优」 集训营   马老师带你横扫一切关于JVM的面试问题,吊打所有敢于提问JVM的面试官。   让你在简历中,填写上JVM调优经历,为升职加薪添上浓墨重彩的一笔。    往下看哦...       下面这些内容,全网首讲,你从未听过,且只讲一次   Go语言内存管理和Java的异同,Rust语言为什么不需要GC?   Golang的内存管理和Jvm有何不同?   Golang的gc算法和Jvm有何不同?   Golang的内存调优应该如何做?  

好程序员Java培训分享Java性能常见命令有哪些

与世无争的帅哥 提交于 2020-08-17 17:20:58
  好程序员Java培训分享Java性能常见命令有哪些,性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就没办法出现性能问题,包括笔者自己遇到的性能问题也不多,所以为了提前储备知识,当出现问题的时候不会手忙脚乱。   既然是定位问题,肯定是需要借助工具,我们先了解下需要哪些工具可以帮忙定位问题。   top命令   top命令是我们最常用的Linux命令之一,它可以实时的显示当前正在执行的进程的CPU使用率,内存使用率等系统信息。top -Hp pid 可以查看线程的系统资源使用情况。   vmstat命令   vmstat是一个指定周期和采集次数的虚拟内存检测工具,可以统计内存,CPU,swap的使用情况,它还有一个重要的常用功能,用来观察进程的上下文切换。字段说明如下:   r: 运行队列中进程数量(当数量大于CPU核数表示有阻塞的线程)   b: 等待IO的进程数量   swpd: 使用虚拟内存大小   free: 空闲物理内存大小   buff: 用作缓冲的内存大小(内存和硬盘的缓冲区)   cache: 用作缓存的内存大小(CPU和内存之间的缓冲区)   si: 每秒从交换区写到内存的大小,由磁盘调入内存   so: 每秒写入交换区的内存大小,由内存调入磁盘   bi: 每秒读取的块数   bo: 每秒写入的块数   in:

12个经典性能测试人员面试题【软件测试Python自动化进阶】

丶灬走出姿态 提交于 2020-08-15 12:35:07
1、性能测试包含了哪些软件测试(至少举出3种)? 参考答案:负载测试;压力测试;容量测试; 负载测试(Load Testing) :负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。 压力测试(Stress Testing) :强度测试也就是压力测试,压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。 容量测试(Volume Testing) :确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。 或者在下面选择几项:并发测试;基准测试 ;争用测试;性能配置 ;负载测试;强度测试;容量测试 2、请问什么是性能测试、负载测试、压力测试? 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试、压力测试参考答案如上题。 3、在给定的测试环境下进行,考虑被测系统的业务压力量和典型场景? 负载测试是用来测定系统饱和状态、确定阀值。其特点有:这种方法的目的是找到系统处理能力的极限;通过“检测、加压、阀值”手段找到如“响应时间不超过10秒”,“平均CPU利用率低于65%”等指标。

一份详尽的 Java 问题排查工具清单,值得收藏!

微笑、不失礼 提交于 2020-08-12 20:59:45
作者:红魔七号 https://yq.aliyun.com/articles/69520 前言 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮助很大的工具,大家一起进步。 闲话不多说,开搞。 Linux命令类 tail 最常用的tail -f tail -300f shopbase.log #倒数300行并进入实时监听文件写入模式 grep grep forest f.txt #文件查找 grep forest f.txt cpf.txt #多文件查找 grep 'log' /home/admin -r -n #目录下查找所有符合关键字的文件 cat f.txt | grep -i shopbase grep 'shopbase' /home/admin -r -n --include *.{vm,java} #指定文件后缀 grep 'shopbase' /home/admin -r -n --exclude *.{vm,java} #反匹配 seq 10 | grep 5 -A 3 #上匹配 seq 10 | grep 5 -B 3 #下匹配 seq 10 | grep 5 -C 3 #上下匹配,平时用这个就妥了 cat f

阿里面试官:这些软件测试面试题都答对了,I want you!

末鹿安然 提交于 2020-08-12 18:51:48
[ 你悄悄来,请记得带走一丝云彩 ] 测试岗必知必会 01 请描述如何划分缺陷与错误严重性和优先级别? 给软件缺陷与错误划分严重性和优先级的通用原则:1. 表示软件缺陷所造成的危害和恶劣程度。2. 优先级表示修复缺陷的重要程度和次序。 严重性:1. 严重:系统崩溃、数据丢失、数据毁坏2. 较严重:操作性错误、结果错误、遗漏功能3. 一般:小问题、错别字、UI布局、罕见故障4. 建议:不影响使用的瑕疵或更好的实现。 优先级:1. 最高优先级:立即修复,停止进一步测试。2. 次高优先级:在产品发布之前必须修复。3. 中等优先级:如果时间允许应该修复。4. 最低优先级:可能会修复,但是也可能发布。 02 一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。 一套完整的测试应该由五个阶段组成: 1.测试计划首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。 2.测试设计将测试计划阶段制定的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响到测试结果的有效性)。 3.测试开发建立可重复使用的自动测试过程。 4