JDK性能分析与故障处理-命令行
一、命令演示
登录主机:21
docker ps -a | grep 'hub.ecs.com:6999/open_pro.*open-pro-apple2'
docker exec -it ID /bin/bash
jps
jinfo 1
jinfo 1 | grep 'sun.java.command' //程序参数 main方法入参
jinfo 1 | grep 'Command line' //虚拟机系统参数,全局参数
jstat -gc 1 3s 10
jstat -gcutil 1 3s 10
#简单看下后续有实例分析
登录测试环境主机:60
docker ps -a | grep 'test.com:6999/open_2k'
docker exec -it ID /bin/bash
jstack 1 > stack1.txt
cat stack1.txt | grep 'java.lang.Thread.State'
cat stack1.txt | grep 'java.lang.Thread.State'| wc -l
cat stack1.txt | grep 'java.lang.Thread.State'|sort| uniq
线程状态:https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.State.html
New、Runnable(Runnable/Running)、Blocked(Blocked/WAITING/TIMED_WAITING)、Dead
#需要工具分析,肉眼不可读
jmap -dump:format=b,file=dump2019.dump 1
二、实例分析(代码见分割线下方)
1.BigObject
VM Options:-Xmx30M -Xms30M
1.1命令行观察内存变化
jstat -gcutil 1 1s 200
1.2visualVM观察
2.SupperBigObject
VM Options:-Xmx30M -Xms30M
1.1命令行观察内存变化
jstat -gcutil 1 1s 200
jstat -gc 1 1s 200
1.2visualVM观察
3.HighCPU(分析stack)
3.1 jstack或visualVM查看栈快照
jstack 1 > HighCPU.txt
本地方便则使用visualVM更方便
3.2 top命令
a."top"命令查找cpu高的进程pid
b."top -Hp pid" 查找cpu高的线程
(mac )
java -jar jvm-1.0-jar-with-dependencies.jar
9551-9584
jstack 9551 > HighCPU.txt
9584->0x2570
grep '0x2570' HighCPU.txt
4.OutOffMem(分析dump)
jmap或visualVM查看栈快照
jmap -dump:format=b,file=dump2019.dump pid
----分割线----以下是练习的代码---
package zero.desk.jdkcommand; import java.util.ArrayList;
import java.util.List; /**
* @author Zero
* @since 2019-09-21.
* Description:
* VM Options:-Xmx30M -Xms30M
*/
public class BigObject {
public Object instance = null;
private static final int ONE_MB = 1024 * 1024; private byte[] bigSize = new byte[2 * ONE_MB]; public static void main(String[] args) throws InterruptedException {
Thread.sleep(12000);
for(int i=0;i<100;i++){
Thread.sleep(1000);
testGC();
}
} private static void testGC() {
BigObject objA = new BigObject();
BigObject objB = new BigObject();
objA.instance = objB;
objB.instance = objA;
// System.gc();
}
} //----
package zero.desk.jdkcommand; /**
* @author Zero
* @since 2019-09-21.
* Description:
*/
public class HighCPU {
public static void main(String[] args) {
new Thread(() -> {
double d = 2.3;
while (true) {
long i = 1;
d = d * d;
if (i % 100000 == 0) {
System.out.println(i);
}
}
}).start(); new Thread(() -> {
long l = 1;
while (true) {
l++;
if (l % 100 == 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start(); }
} //---
package zero.desk.jdkcommand; import java.util.ArrayList;
import java.util.List; /**
* @author Zero
* @since 2019-09-21.
* Description:
* VM Options:-Xmx50M -Xms50M
*/
public class OutOffMem { private static List<BigObject> GCRoot = new ArrayList<>(); public static void main(String[] args) throws InterruptedException {
Thread.sleep(12000);
for(int i=0;i<100;i++){
Thread.sleep(1000);
testGC();
}
} private static void testGC() {
BigObject objA = new BigObject();
BigObject objB = new BigObject();
objA.instance = objB;
objB.instance = objA;
//内存不会释放
GCRoot.add(objA);
GCRoot.add(objB);
System.gc();
}
} //----
package zero.desk.jdkcommand; /**
* @author Zero
* @since 2019-09-21.
* Description:
* VM Options:-Xmx30M -Xms30M
* 超过survivor的直接进入eden
* 超过年轻代的直接进入老年代
*/
public class SupperBigObject {
public Object instance = null;
private static final int ONE_MB = 1024 * 1024; // private byte[] bigSize = new byte[8 * ONE_MB];
private byte[] bigSize = new byte[9 * ONE_MB]; public static void main(String[] args) throws InterruptedException {
Thread.sleep(12000);
for(int i=0;i<100;i++){
Thread.sleep(1000);
testGC();
}
} private static void testGC() {
SupperBigObject objA = new SupperBigObject();
SupperBigObject objB = new SupperBigObject();
objA.instance = objB;
objB.instance = objA;
// System.gc();
}
}
JDK性能分析与故障处理-命令行的更多相关文章
- JVM性能监控与故障处理命令行工具
JDK命令行工具 Sun公司作为”礼物“赠送给JDK使用者的工具: 这些命令行工具大多是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库(不属于java的标准API) ...
- 监控Linux性能的18个命令行工具
监控 Linux 性能的 18 个命令行工具 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐 认识到监控和保 ...
- Linux性能分析工具top命令详解
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析. top命令说明 [www.linuxidc.com@linuxidc-t-tomcat-1 ...
- x264源代码简单分析:x264命令行工具(x264.exe)
===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...
- 监控 Linux 性能的 18 个命令行工具
http://www.oschina.net/translate/command-line-tools-to-monitor-linux-performance 1.Top-Linux进程监控 Lin ...
- [转载]监控 Linux 性能的 18 个命令行工具
转自:http://www.kuqin.com/shuoit/20140219/338066.html 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一 ...
- 监控 Linux 性能的 18 个命令行工具[转]
对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易.基于此原因,我们 ...
- JVM性能监控与故障处理命令汇总(jps、jstat、jinfo、jmap、jhat、jstack)
给一个系统定位问题的时候,知识.经验是关键基础,数据是依据,工具才是运用知识处理数据的手段 使用适当的虚拟机监控和分析的工具可以加快我们分析数据.定位解决问题的速度,本文主要介绍了几款服 务器上常用的 ...
- 监控 Linux 性能的 18 个命令行工具(转)
http://www.oschina.net/translate/command-line-tools-to-monitor-linux-performance?cmp&p=1# 1.Top- ...
随机推荐
- 大型情感剧集Selenium:2_options设置 #华为云·寻找黑马程序员#
上集回顾 昨天说简单介绍了什么是selenium,它能干what,和发展史与梗概.当的是python如何通过pip安装selenium,并下载对应浏览器的webdriver. 最后简单通过一个Demo ...
- 什么是渐进式框架 (vue.js)
渐进式意味着你可以将 vue 作为你项目的一部分嵌入其中,带来更丰富的交互体验
- Webstorm相关设置
[1.快速激活Webstorm] http://jingyan.baidu.com/article/9f63fb919674f2c8400f0e9a.html [2.webstorm 2017 激活破 ...
- Java修炼——IO流的概念以及其分类
IO流的基本概念: 流的原理: 1) 在 Java 程序中,对于数据的输入/输出操作以"流" (stream) 方式进行: 2) J2SDK 提供了各种各样的"流&quo ...
- Servlet和Tomcat底层源码分析
Servlet 源码分析 Servlet 结构图 Servlet 和 ServletConfig 都是顶层接口,而 GenericServlet 实现了这两个顶层接口,然后HttpServlet ...
- [TimLinux] JavaScript 代码控制滚动条移动到顶部/底部
1. scrollIntoView函数 这个函数控制滚动条顶部内容.还是底部内容呈现在视图窗口中,接收一个参数:boolean值. true: 顶部出现在视图窗口中 false: 底部存在在视图窗口中 ...
- 【解决】error pulling image configuration: Get https:// ...... x509: certificate has expired or is not yet valid
[问题]进行镜像拉取时报错 [分析] 很多人会被第一句所蒙蔽,按照网上教程进行修改etc/sysconfig/docker,之后发现还是没有用. 其实这里重点是最后一句"certificat ...
- Dubbo 2.7新特性之异步化改造
这是why技术的第1篇原创文章 我与Dubbo的二三事 我是2016年毕业的,在我毕业之前,我在学校里面学到的框架都是SSH,即struts+spring+hibernate,是的你没有看错,在大学里 ...
- 最新设计打样制作完成的FPGA视频开发板VIP—V101
设计目的:1.摄像头驱动(30w-500w mipi接口)2.VGA显示器驱动3.USB2.0视频采集4.tft液晶接口(ttl.lvds驱动)5.视频.图像处理(算法验证)6.各种视频接口处理(av ...
- 【MobX】390- MobX 入门教程(上)
点击上方"前端自习课"关注,学习起来~ 本文考虑到篇幅问题,将<MobX 入门教程>分成上.下两篇文章,方便阅读.分配安排: 一.MobX 介绍 首先看下官网介绍: ★ ...