JMAP

好程序员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:

4 GC分析 命令调优

此生再无相见时 提交于 2020-08-17 16:25:33
GC分析 命令调优 0 主要内容: ① JVM常用内存调优命令:(重点掌握) JVM在内存调优方面,提供了几个常用的命令,分别为 jps,jinfo,jstack,jmap以及jstat命令 。分别介绍如下: jps: 主要用来输出JVM中运行的进程状态信息,一般使用jps命令来查看进程的状态信息,包括JVM启动参数等。 jinfo: 主要用来观察进程运行环境参数等信息。 jstack: 主要用来查看某个Java进程内的线程堆栈信息。jstack pid 可以看到当前进程中各个线程的状态信息,包括其持有的锁和等待的锁。 jmap: 用来查看堆内存使用状况。jmap -heap pid可以看到当前进程的堆信息和使用的GC收集器,包括年轻代和老年代的大小分配等 jstat: 进行实时命令行的监控,包括堆信息以及实时GC信息等。可以使用jstat -gcutil pid1000来每隔一秒来查看当前的GC信息。 来源: oschina 链接: https://my.oschina.net/u/4419899/blog/4489714

fullGC 频繁导致CPU飙高

喜你入骨 提交于 2020-08-16 14:46:52
鄙人上班正在摸鱼中,突然后收到领导电话服务 报 503 好吧吓死了赶紧百度 http 503 :因暂时超载或临时维护,您的 Web 服务器目前无法处理 HTTP 请求。 其含义是, 这是一个暂时情况,会有一些延误, 过 后将会得到缓解。 有些服务器在这种情况下也许干脆拒绝套接字(socket) 连接,在这种情况下,可能会由于套接字建立超时而产生不同的错误信息。 说白了 服务压力或者别的原因 忙不过来了 我自己组装了一笔报文 用curl 脚本发送 发现 十多秒都没返回 开始下面排查 以下所有截图都不是 demo 而是真实样例 指令TOP top: 提供实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序 load average:系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 Cpu(s):显示CPU信息 75.9%us 用户空间占用CPU百分比 0.4%sy 内核和中断占用CPU百分比 0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比 23.7%id 空闲CPU百分比 0.0%wa 等待输入输出的CPU时间百分比 0.0%hi 硬中断(Hardware IRQ)占用CPU的百分比 0.0%si 软中断(Software Interrupts

记一次线上服务CPU 100%的处理过程

那年仲夏 提交于 2020-08-15 23:50:05
告警 正在开会,突然钉钉告警声响个不停,同时市场人员反馈客户在投诉系统登不进了,报504错误。查看钉钉上的告警信息,几台业务服务器节点全部报CPU超过告警阈值,达100%。 赶紧从会上下来,SSH登录服务器,使用 top 命令查看,几个Java进程CPU占用达到180%,190%,这几个Java进程对应同一个业务服务的几个Pod(或容器)。 定位 使用 docker stats 命令查看本节点容器资源使用情况,对占用CPU很高的容器使用 docker exec -it <容器ID> bash 进入。 在容器内部执行 top 命令查看,定位到占用CPU高的进程ID,使用 top -Hp <进程ID> 定位到占用CPU高的线程ID。 使用 jstack <进程ID> > jstack.txt 将进程的线程栈打印输出。 退出容器, 使用 docker cp <容器ID>:/usr/local/tomcat/jstack.txt ./ 命令将jstack文件复制到宿主机,便于查看。获取到jstack信息后,赶紧重启服务让服务恢复可用。 将2中占用CPU高的线程ID使用 pringf '%x\n' <线程ID> 命令将线程ID转换为十六进制形式。假设线程ID为133,则得到十六进制85。在jstack.txt文件中定位到 nid=0x85 的位置,该位置即为占用CPU高线程的执行栈信息

记录OOM GC问题

时光总嘲笑我的痴心妄想 提交于 2020-08-15 21:52:57
首先排查TOP 查看哪个进程占用CPU比例高 执行 jstack java 4372(进程号) >> cpu.txt ,将进程线程使用情况输出到文件内 执行top -H -p 4372 查看线程 4377 将其转成 16 进制 为 1119,到刚才 jstack导出来的cpu.txt中搜索1119线程 然后执行 jmap -dump:format=b,file=heapdump.bin 4372 将其dump下来, 最后用 MemoryAnalyzer 工具打开,分析具体排查问题 来源: oschina 链接: https://my.oschina.net/u/3370769/blog/4293720

《深入理解JVM.2nd》笔记(四):虚拟机性能监控与故障处理工具

孤街浪徒 提交于 2020-08-15 16:33:22
概述 给一个系统定位问题的时候, 知识、经验 是关键基础, 数据 是依据, 工具 是运用知识处理数据的手段。这里说的 数据 包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件)、堆转储快照(headdump/hprof文件)等。 经常使用适当的虚拟机监控和分析工具可以加快分析数据、定位解决问题的速度,但在学习工具前,也应当意识到 工具永远都是知识技能的一层包装 。 JDK的命令行工具 这些工具比较小巧,只因这些命令行工具大多数是JDK/lib/tools.jar类库的一层薄包装而已 JDK开发团队选择采用Java代码来实现这些监控工具是有特别用意的 :当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程Telnet到服务器上都可能会受到限制。借助tools.jar类库里面的接口,我们可以直接在应用程序中实现功能强大的监控分析功能。 下表是Sun JDK监控和故障处理工具 名称 主要作用 jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程 jstat JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据 jinfo Configuration Info for Java,显示虚拟机配置信息 jmap Memory Map for

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

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

记一次线上服务CPU 100%的处理过程

痴心易碎 提交于 2020-08-15 03:49:13
告警 正在开会,突然钉钉告警声响个不停,同时市场人员反馈客户在投诉系统登不进了,报504错误。查看钉钉上的告警信息,几台业务服务器节点全部报CPU超过告警阈值,达100%。 赶紧从会上下来,SSH登录服务器,使用 top 命令查看,几个Java进程CPU占用达到180%,190%,这几个Java进程对应同一个业务服务的几个Pod(或容器)。 定位 使用 docker stats 命令查看本节点容器资源使用情况,对占用CPU很高的容器使用 docker exec -it <容器ID> bash 进入。 在容器内部执行 top 命令查看,定位到占用CPU高的进程ID,使用 top -Hp <进程ID> 定位到占用CPU高的线程ID。 使用 jstack <进程ID> > jstack.txt 将进程的线程栈打印输出。 退出容器, 使用 docker cp <容器ID>:/usr/local/tomcat/jstack.txt ./ 命令将jstack文件复制到宿主机,便于查看。获取到jstack信息后,赶紧重启服务让服务恢复可用。 将2中占用CPU高的线程ID使用 pringf '%x\n' <线程ID> 命令将线程ID转换为十六进制形式。假设线程ID为133,则得到十六进制85。在jstack.txt文件中定位到 nid=0x85 的位置,该位置即为占用CPU高线程的执行栈信息

JVM:查看java内存情况命令

霸气de小男生 提交于 2020-08-13 21:03:18
jinfo:可以输出并修改运行时的java 进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。 jconsole:一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。 详细:在使用这些工具前,先用JPS命令获取当前的每个JVM进程号,然后选择要查看的JVM。 jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。 jstat -class pid:显示加载class的数量,及所占空间等信息。 jstat -compiler pid:显示VM实时编译的数量等信息。 jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。 jstat -gccapacity:可以显示,VM内存中三代(young,old

一个软件测试必问面试题——除了功能测试,你还会做什么测试?性能、自动化、兼容性... 【思维导图】

*爱你&永不变心* 提交于 2020-08-13 17:29:45
引言 用例设计是测试工程师的必备技能。所以在面试时会有一个用例设计的问题,比如:给你一个杯子怎么测试?扫码支付怎么测试?面试官会挑一个大家非常熟悉的产品的一个功能让设计用例。 面试官到底想考察什么? 衡量一个人员的水平,主要测试的 广度 和 深度 两个方面,这是面试官最关心的。 什么是测试的广度? 除了功能测试,你还会做什么测试?性能、自动化、兼容性... 我总结一个图供参考( 1079636098 )推荐软件测试交流群 什么是测试深度? 就拿扫码支付这个例子来说吧。 大家设计用例时可能会设计,这个码能不能扫成功、会不会自动化刷新、如果扫非本App码会怎么样、光线不好怎么办、容不容易扫出来、支付是否能成功、各种支付方式、使用红包、支付失败怎么办... 这些场景都比较基础。 二维码到底是什么?它是怎么存储数据的?如果存储URL的话,可以存储多少数据,数据多是不是不容易扫了 支付过程用https传输,是怎么传输的,什么TLS握手,如果用Burp Suite拦截,修改支付金额能支付成功吗? 支付时比较卡,怎么定位卡的原因,怎么用Time Profiler定位到卡顿地方 接口有性能问题,怎么定位,什么是Full GC,怎么用jstat、jstack、jmap定位问题... 这就是测试的深度 怎么回答到这个问题? 这个是什么App,什么功能确定后。要冷静,不要马上回答。即使像微信这种常用软件