目录
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
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:



