栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM调优指令小总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM调优指令小总结

目录

1.查看JVM进程:

 2.Linux查看进程的线程信息

(1). ps指令:

(2). pstree指令

(3). top指令

3.查看JVM 的gc信息

(1) 第一种方式

(2) 第二种方式

4.查看JVM参数:

(1).查看JVM所有参数: 

(2).查看JVM单一参数:

5.K8s集群环境 

6.FGC效果实现:


1.查看JVM进程:
C:UsersThinkPad>jps
33360 Launcher
4532
18696 MainClientBootStrap
21864 Launcher
18380 MainServerBootStrap
19212 Jps

 2.Linux查看进程的线程信息

参考文章:Linux查看进程的线程信息_慕城南风的博客-CSDN博客_linux查看线程

(1). ps指令:

在ps命令中,“-T”选项可以查看线程信息。下面的命令列出了由进程号为的进程中的所有线程。 

ps -T -p 

“SID”栏表示线程ID,而“CMD”栏则显示了线程名称。  

[root@zhihuiyingxiao-dev-68499-04i2g ~]# ps -T -p 20754
  PID  SPID TTY          TIME CMD
20754 20754 ?        00:00:00 java
20754 20755 ?        00:00:17 java
20754 20756 ?        00:00:30 java
20754 20757 ?        00:00:30 java
20754 20759 ?        00:02:11 java
20754 20760 ?        00:00:00 java
20754 20761 ?        00:00:02 java
20754 20762 ?        00:00:00 java
20754 20774 ?        00:02:13 java
20754 20800 ?        00:15:19 java
20754 20801 ?        00:17:50 java
20754 20802 ?        00:03:39 java
20754 20803 ?        00:00:07 java
20754 20804 ?        00:00:00 java
20754 20805 ?        00:00:11 java
20754 20806 ?        00:01:07 java
20754 20807 ?        00:00:01 java
20754 20808 ?        00:15:17 java
20754 20809 ?        00:00:12 java
20754 20810 ?        00:00:02 java
20754 20811 ?        00:01:04 java
..................................

(2). pstree指令
// 打印所有进程及其线程
pstree -p 
// 打印某个进程的线程数
pstree -p {pid} | wc -l

(3). top指令

top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。

加了-H参数后,top的每一行就不是显示一个进程,而是一个线程。 

top -H

要让top输出某个特定进程并检查该进程内运行的线程状况:

top -H -p 

3.查看JVM 的gc信息

(1) 第一种方式

(2) 第二种方式

参考文章:JVM查看gc情况_本本的香菜的博客-CSDN博客_jvm查看gc 

jstat -gcutil pid interval(ms)

S0: 新生代中Survivor space 0区已使用空间的百分比

S1: 新生代中Survivor space 1区已使用空间的百分比
E: 新生代已使用空间的百分比
O: 老年代已使用空间的百分比
M: 方法区已使用空间的百分比

YGC: 从应用程序启动到当前,发生Yang GC 的次数

YGCT: 从应用程序启动到当前,Yang GC所用的时间【单位秒】

FGC: 从应用程序启动到当前,发生Full GC的次数

FGCT: 从应用程序启动到当前,Full GC所用的时间

GCT: 从应用程序启动到当前,用于垃圾回收的总时间【单位秒】

4.查看JVM参数:

(1).查看JVM所有参数: 
jinfo pid
C:UsersThinkPad>jinfo 18380
Attaching to process ID 18380, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.291-b10
Java System Properties:

java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.291-b10
sun.boot.library.path = C:Program FilesJavajdk1.8.0_291jrebin
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = ;
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.os.patch.level =
sun.java.launcher = SUN_STANDARD
user.script =
user.country = CN
user.dir = H:eclipse-workspacenetty-learning
java.vm.specification.name = Java Virtual Machine Specification
java.runtime.version = 1.8.0_291-b10
java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = C:Program FilesJavajdk1.8.0_291jrelibendorsed
line.separator =

java.io.tmpdir = C:UsersThinkPadAppDataLocalTemp
java.vm.specification.vendor = Oracle Corporation
user.variant =
os.name = Windows 10
sun.jnu.encoding = GBK
java.library.path = C:Program FilesJavajdk1.8.0_291bin;C:WindowsSunJavabin;C:Windowssystem32;C:Windows;C:Program Files (x86)Common FilesOracleJavajavapath;C:Program Files (x86)VMwareVMware Workstationbin;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program FilesMySQLMySQL Server 8.0bin;F:javaapache-maven-3.8.4bin;C:Program FilesGitcmd;C:Program FilesJavajdk1.8.0_291bin;C:Program FilesJavajdk1.8.0_291jrebin;F:Program Filesnodejs;C:ProgramDatachocolateybin;C:UsersThinkPadAppDataLocalProgramsPythonPython39Scripts;C:UsersThinkPadAppDataLocalProgramsPythonPython39;C:Program FilesMySQLMySQL Shell 8.0bin;C:UsersThinkPadAppDataLocalMicrosoftWindowsApps;;C:Program FilesJetBrainsIntelliJ IDEA 2019.2.4bin;;C:UsersThinkPadAppDataLocalProgramsMicrosoft VS Codebin;C:UsersThinkPadAppDataRoamingnpm;.
sun.nio.ch.bugLevel =
java.specification.name = Java Platform API Specification
java.class.version = 52.0
sun.management.compiler = HotSpot 64-Bit Tiered Compilers
os.version = 10.0
user.home = C:UsersThinkPad
user.timezone = Asia/Shanghai
java.awt.printerjob = sun.awt.windows.WPrinterJob
file.encoding = UTF-8
java.specification.version = 1.8
user.name = ThinkPad
java.class.path = C:Program FilesJavajdk1.8.0_291jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_291jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_291jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_291jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_291jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_291jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_291jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_291jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_291jrelibextnashorn.jar;C:Program FilesJavajdk1.8.0_291jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_291jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_291jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_291jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_291jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_291jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_291jrelibjce.jar;C:Program FilesJavajdk1.8.0_291jrelibjfr.jar;C:Program FilesJavajdk1.8.0_291jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_291jrelibjsse.jar;C:Program FilesJavajdk1.8.0_291jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_291jrelibplugin.jar;C:Program FilesJavajdk1.8.0_291jrelibresources.jar;C:Program FilesJavajdk1.8.0_291jrelibrt.jar;H:eclipse-workspacenetty-learningtargetclasses;F:javamaven-repoionettynetty-all4.1.20.Finalnetty-all-4.1.20.Final.jar;C:Program FilesJetBrainsIntelliJ IDEA 2021.3.1libidea_rt.jar
java.vm.specification.version = 1.8
sun.arch.data.model = 64
sun.java.command = com.bruce.dubboLearn.provider.MainServerBootStrap
java.home = C:Program FilesJavajdk1.8.0_291jre
user.language = zh
java.specification.vendor = Oracle Corporation
awt.toolkit = sun.awt.windows.WToolkit
java.vm.info = mixed mode
java.version = 1.8.0_291
java.ext.dirs = C:Program FilesJavajdk1.8.0_291jrelibext;C:WindowsSunJavalibext
sun.boot.class.path = C:Program FilesJavajdk1.8.0_291jrelibresources.jar;C:Program FilesJavajdk1.8.0_291jrelibrt.jar;C:Program FilesJavajdk1.8.0_291jrelibsunrsasign.jar;C:Program FilesJavajdk1.8.0_291jrelibjsse.jar;C:Program FilesJavajdk1.8.0_291jrelibjce.jar;C:Program FilesJavajdk1.8.0_291jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_291jrelibjfr.jar;C:Program FilesJavajdk1.8.0_291jreclasses
java.vendor = Oracle Corporation
file.separator = 
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
sun.desktop = windows
sun.cpu.isalist = amd64

VM Flags:
Non-default VM flags: -XX:CICompilerCount=4 -XX:InitialHeapSize=266338304 -XX:MaxHeapSize=4229955584 -XX:MaxNewSize=1409810432 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=88604672 -XX:OldSize=177733632 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
Command line:  -javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2021.3.1libidea_rt.jar=50717:C:Program FilesJetBrainsIntelliJ IDEA 2021.3.1bin -Dfile.encoding=UTF-8

(2).查看JVM单一参数:
#jinfo -flag MaxHeapSize 18380

-XX:MaxHeapSize=4229955584

5.K8s集群环境 

在k8s集群环境下,Pod内存资源是怎样分配的?堆内存占多少呢?

假设Pod有2G的内存资源,如果不设置JVM堆内存大小,那么JVM堆的默认大小是Pod资源的 1/4,也就是说如果Pod内存资源是2G,那么JVM堆大小是500M左右;如果Pod是4G,那么JVM堆大小是1G。

Pod内存资源是2G,如果将JVM堆大小设置为1G,那么程序是启动不了的,因为Pod作为一个虚拟机,并不是所有的内存资源都可以给JVM使用的。

[root@shuziyingxiao-prod-05912-hpi30 ~]# kubectl exec -it wit-crm-58f7bb9b75-dcqjk -n wit /bin/sh
/ # 
/ # jps
8 app.jar
11085 Jps
/ # 
/ # jinfo -flag MaxHeapSize 8
-XX:MaxHeapSize=536870912
/ # 
/ # jstat -gcutil 8 2000
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
 47.92   0.00  69.32  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  69.83  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  69.85  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  71.56  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  71.72  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  71.73  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  71.82  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  73.33  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  73.69  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  73.70  84.04  87.84  81.24   9816   70.244    10    5.398   75.643
 47.92   0.00  73.90  84.04  87.84  81.24   9816   70.244    10    5.398   75.643

6.FGC效果实现:

怎样写代码,实现FGC的效果呢?

这里给出一个例子:

package com.example.demo.controller;

import com.example.demo.util.CreateUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("hello")
public class TestController {

    @GetMapping("world")
    public String getResponse(){
        Object[] objects = new Object[600*1024];
        for (int i=0; i< 600*1024 ; i++){
            objects[i] = new Object();
        }
//        CreateUtil.add();
        System.out.println("hello, world, bruce!");
        return "hello, world - 20220505!";
    }
}

new一个足够大的数组,然后用new object填充,每次请求都是这样的操作。

然后打开jmeter,1000个并发线程去访问上面的API

产生FGC:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号