一、命令演示
登录主机: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性能分析与故障处理-命令行的更多相关文章

  1. JVM性能监控与故障处理命令行工具

    JDK命令行工具 Sun公司作为”礼物“赠送给JDK使用者的工具: 这些命令行工具大多是jdk/lib/tools.jar类库的一层薄包装,主要功能代码是在tools类库(不属于java的标准API) ...

  2. 监控Linux性能的18个命令行工具

    监控 Linux 性能的 18 个命令行工具 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐 认识到监控和保 ...

  3. Linux性能分析工具top命令详解

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,常用于服务端性能分析. top命令说明 [www.linuxidc.com@linuxidc-t-tomcat-1 ...

  4. x264源代码简单分析:x264命令行工具(x264.exe)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  5. 监控 Linux 性能的 18 个命令行工具

    http://www.oschina.net/translate/command-line-tools-to-monitor-linux-performance 1.Top-Linux进程监控 Lin ...

  6. [转载]监控 Linux 性能的 18 个命令行工具

    转自:http://www.kuqin.com/shuoit/20140219/338066.html 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一 ...

  7. 监控 Linux 性能的 18 个命令行工具[转]

    对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并运行是多么的不容易.基于此原因,我们 ...

  8. JVM性能监控与故障处理命令汇总(jps、jstat、jinfo、jmap、jhat、jstack)

    给一个系统定位问题的时候,知识.经验是关键基础,数据是依据,工具才是运用知识处理数据的手段 使用适当的虚拟机监控和分析的工具可以加快我们分析数据.定位解决问题的速度,本文主要介绍了几款服 务器上常用的 ...

  9. 监控 Linux 性能的 18 个命令行工具(转)

    http://www.oschina.net/translate/command-line-tools-to-monitor-linux-performance?cmp&p=1# 1.Top- ...

随机推荐

  1. Python-Excel 模块哪家强 #华为云·寻找黑马程序员#

    python操作excel 最原始的莫过于两位老牌黄金搭档xlrd xlwt了,针对二者的封装有如下模块: xlutils & xlrd & xlwt 为什么把这三个一起说? 首先,x ...

  2. 是时候考虑让你的Spark跑在K8S上了

    [摘要] Spark社区在2.3版本开始,已经可以很好的支持跑着Kubernetes上了.这样对于统一资源池,提高整体资源利用率,降低运维成本(特别是技术栈归一)有着非常大的帮助.这些趋势是一个大数据 ...

  3. KETTLE单表同步,写入EXCEL和TXT

    以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对 在平时工作当中,会遇到这种情况,而且很常见.比如:1.自动生成文件TXT或者EXCEL(电信行业该需求居多),上传至某服务器:2.双方数 ...

  4. BZOJ2440完全平方数(莫比乌斯反演)

    Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱. 这天是 ...

  5. [Python Modules] unittest.mock

    五夜光寒,照来积雪平于栈.西风何限,自起披衣看. 对此茫茫,不觉成长叹.何时旦,晓星欲散,飞起平沙雁. 在某个Python程序中看到这么一行 from unittest import mock 看起来 ...

  6. KEIL MDK 算式优先级 备忘

    GPRS_SEND_Buff[index++]=stDev.SN>>24+(GPRS_SEND_Buff[4]%4); GPRS_SEND_Buff[index++]=stDev.SN&g ...

  7. 深入理解 Java 方法

    方法(有的人喜欢叫函数)是一段可重用的代码段.

  8. 回归损失函数2 : HUber loss,Log Cosh Loss,以及 Quantile Loss

    均方误差(Mean Square Error,MSE)和平均绝对误差(Mean Absolute Error,MAE) 是回归中最常用的两个损失函数,但是其各有优缺点.为了避免MAE和MSE各自的优缺 ...

  9. java发送邮件基础方法(另附部分主流邮箱服务器地址、端口及设置方法)

    java发送邮件基础方法,可通过重载简化参数 import java.io.File; import java.io.UnsupportedEncodingException; import java ...

  10. CSS——overflow的参数以及使用

    学习网站:https://developer.mozilla.org/zh-CN/docs/Web/CSS/overflow