查看当前java进程情况 及 pid,相似与linux里的ps命令
xir ~$ jps -q
47056
46243
46227
46186
xBook-Air ~$ jps -m
46243 Launcher /Applications/IntelliJ IDEA.app/Contents/lib/asm-all-7.0.1.jar:/Applications/IntelliJ IDEA.app/Contents/lib/lz4-java-1.6.0.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/maven-aether-provider-3.3.9.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/aether-connector-basic-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/plexus-utils-3.0.22.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/aether-api-1.1.0.jar:/Applications/IntelliJ IDEA.app/Contents/lib/httpclient-4.5.9.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/maven-model-builder-3.3.9.jar:/Applications/IntelliJ IDEA.app/Contents/lib/netty-codec-4.1.38.Final.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/maven-builder-support-3.3.9.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/jps-builders-6.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/javac2.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/li
46227 DemoApplication
46186
47100 Jps -m
eMacBook-Air ~$ jps -l
46243 org.jetbrains.jps.cmdline.Launcher
46227 com.example.demo.DemoApplication
47076 jdk.jcmd/sun.tools.jps.Jps
46186
xiaAir ~$ jps -v
46737 Jps -Dapplication.home=/Library/Java/JavaVirtualMachines/jdk-12.0.2.jdk/Contents/Home -Xms8m -Djdk.module.main=jdk.jcmd
46243 Launcher -Xmx700m -Djava.awt.headless=true -Djdt.compiler.useSingleThread=true -Dpreload.project.path=/Users/xiaochai/java/demo -Dpreload.config.path=/Users/22/Library/Preferences/IntelliJIdea2019.2/options -Dexternal.project.config=/Users/22/Library/Caches/IntelliJIdea2019.2/external_build_system/demo.4ba6d4c3 -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Djava.net.preferIPv4Stack=true -Dio.netty.initialSeedUniquifier=-7511366293896763489 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2019.2 -Didea.home.path=/Applications/IntelliJ IDEA.app/Contents -Didea.config.path=/Users/xiaochai/Library/Preferences/IntelliJIdea2019.2 -Didea.plugins.path=/Users/22/Library/Application Support/IntelliJIdea2019.2 -Djps.log.dir=/Users/22/Library/Logs/IntelliJIdea2019.2/build-log -Djps.fallback.jdk.home=/Applications/IntelliJ IDEA.app/Contents/jbr/Contents/Home -Djps.fallback.jdk.version=11.0.3 -Dio.netty.noUnsafe=true -Djava.io.tmpdir=/Users/xiaochai
46227 DemoApplication -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56610:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8
46186 -Xms128m -Xmx1024m -XX:ReservedCodeCacheSize=240m -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -XX:CICompilerCount=2 -Dsun.io.useCanonPrefixCache=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Djdk.attach.allowAttachSelf -Dkotlinx.coroutines.debug=off -Xverify:none -XX:ErrorFile=/Users/22/java_error_in_idea_%p.log -XX:HeapDumpPath=/Users/22/java_error_in_idea.hprof -javaagent:/Users/22/Documents/jetbrains-agent/jetbrains-agent.jar -Djb.vmOptionsFile=/Users/xiaochai/Library/Preferences/IntelliJIdea2019.2/idea.vmoptions -Didea.home.path=/Applications/IntelliJ IDEA.app/Contents -Didea.executable=idea -Didea.paths.selector=IntelliJIdea2019.2
使用–help 查看
xiaochai@xiaochaideMacBook-Air ~$ jinfo --help
Usage:
jinfo <option> <pid> 对应jvm进程id
(to connect to a running process)
where <option> is one of:
-flag <name> to print the value of the named VM flag 输出对应名称的参数
-flag [+|-]<name> to enable or disable the named VM flag 开启或者关闭对应名称的参数
-flag <name>=<value> to set the named VM flag to the given value 设定对应名称的参数
-flags to print VM flags 输出全部的参数
-sysprops to print Java system properties
<no option> to print both VM flags and system properties 输出全部的参数和系统属性
-? | -h | --help | -help to print this help message
命令:jinfo pid
描述:输出当前 jvm 进程的全部参数和系统属性
命令:jinfo -flag name pid
描述:输出对应名称的参数
使用该命令,可以查看指定的 jvm 参数的值。如:查看当前 jvm 进程是否开启打印 GC 日志。
xiaochai@xiaochaideMacBook-Air ~$ jinfo -flag PrintGC 46227
-XX:-PrintGC
命令:jinfo -flags pid
描述:输出全部的参数
xiaochai@xiaochaideMacBook-Air ~$ jinfo -flags 67066
67066: No such process
xiaochai@xiaochaideMacBook-Air ~$ jinfo -flags 57066
VM Flags:
-XX:CICompilerCount=3 -XX:ConcGCThreads=1 -XX:G1ConcRefinementThreads=4 -XX:G1HeapRegionSize=1048576 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=134217728 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=734003200 -XX:MaxNewSize=440401920 -XX:MinHeapDeltaBytes=1048576 -XX:NonNMethodCodeHeapSize=5830732 -XX:NonProfiledCodeHeapSize=122913754 -XX:ProfiledCodeHeapSize=122913754 -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC
命令:jinfo -sysprops pid
描述:输出当前 jvm 进行的全部的系统属性
xiaochai@xiaochaideMacBook-Air ~$ jinfo -sysprops 57066
Java System Properties:
#Fri Jun 26 03:24:35 CST 2020
awt.toolkit=sun.lwawt.macosx.LWCToolkit
java.specification.version=12
sun.jnu.encoding=UTF-8
java.class.path=/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/jps-launcher.jar\:/Library/Java/JavaVirtualMachines/jdk-12.0.2.jdk/Contents/Home/lib/tools.jar
java.vm.vendor=Oracle Corporation
jdt.compiler.useSingleThread=true
sun.arch.data.model=64
kotlin.incremental.compilation=true
kotlin.daemon.client.alive.path="/var/folders/mv/kn2dvc3x1rb6hx3qc1tz3s5m0000gn/T/kotlin-idea-7691781754153802143-is-running"
java.vendor.url=https\://java.oracle.com/
user.timezone=Asia/Shanghai
idea.plugins.path=/Users/xiaochai/Library/Application Support/IntelliJIdea2019.2
java.vm.specification.version=12
kotlin.incremental.compilation.js=true
os.name=Mac OS X
user.country=CN
sun.java.launcher=SUN_STANDARD
-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,
JVM就会增大堆直到-Xmx的最大限制
-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,
JVM会减少堆直到 -Xms的最小限制
-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。
与jmap -heap中显示的New gen是不同的。整个堆大小=新生代大小 + 老生代大小 + 永久代大小。
在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认值为8。
两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10。
-Xss:每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。
应根据应用的线程所需内存大小进行适当调整。在相同物理内存下,减小这个值能生成更多的线程。
但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
一般小的应用, 如果栈不是很深, 应该是128k够用的,大的应用建议使用256k。
这个选项对性能影响比较大,需要严格的测试。和threadstacksize选项解释很类似,
官方文档似乎没有解释,在论坛中有这样一句话:
"-Xss is translated in a VM flag named ThreadStackSize”一般设置这个值就可以了。
-XX:PermSize:设置永久代(perm gen)初始值。默认值为物理内存的1/64。
-XX:MaxPermSize:设置持久代最大值。物理内存的1/4。
命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。
用法
xiaochai@xiaochaideMacBook-Air ~$ jmap --help
Usage:
jmap -clstats <pid>
to connect to running process and print class loader statistics
jmap -finalizerinfo <pid>
to connect to running process and print information on objects awaiting finalization
jmap -histo[:live] <pid>
to connect to running process and print histogram of java object heap
if the "live" suboption is specified, only count live objects
jmap -dump:<dump-options> <pid>
to connect to running process and dump java heap
jmap -? -h --help
to print this help message
dump-options:
live dump only live objects; if not specified,
all objects in the heap are dumped.
format=b binary format
file=<file> dump heap to <file>
Example: jmap -dump:live,format=b,file=heap.bin <pid>
命令:jmap -clstats pid
描述:打印类加载器信息
-clstats是-permstat的替代方案,在JDK8之前,-permstat用来打印类加载器的数据
打印Java堆内存的永久保存区域的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。
xiaochai@xiaochaideMacBook-Air ~$ jmap -clstats 57459 | grep Demo
1638 3581 32 576 0 2296 10 271 1760 1384 3712 5096 com.example.demo.DemoApplication$$EnhancerBySpringCGLIB$$5357a3d2
3581 15 0 528 48 440 2 13 352 288 1216 1504 com.example.demo.DemoApplication
命令:jmap -histo:live pid
描述:显示堆中对象的统计信息
其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果指定了live子选项,则只计算活动的对象。
xiaochai@xiaochaideMacBook-Air ~$ jmap -histo:live 57459
num #instances #bytes class name (module)
-------------------------------------------------------
1: 54981 5293336 [B ([email protected])
2: 52586 1262064 java.lang.String ([email protected])
3: 11907 1047816 java.lang.reflect.Method ([email protected])
4: 8036 952352 java.lang.Class ([email protected])
5: 22530 720960 java.util.concurrent.ConcurrentHashMap$Node ([email protected])
6: 8342 485144 [Ljava.lang.Object; ([email protected])
7: 11715 468600 java.util.LinkedHashMap$Entry ([email protected])
8: 5561 432784 [Ljava.util.HashMap$Node; ([email protected])
9: 3186 414808 [I ([email protected])
10: 12142 388544 java.util.HashMap$Node ([email protected])
11: 6150 344400 java.util.LinkedHashMap ([email protected])
12: 14547 327560 [Ljava.lang.Class; ([email protected])
13: 368 223232 [Ljava.util.concurrent.ConcurrentHashMap$Node; ([email protected])
14: 2365 170280 java.lang.reflect.Field ([email protected])
15: 10583 169328 java.lang.Object ([email protected])
16: 1345 107600 java.lang.reflect.Constructor ([email protected])
17: 2576 103040 java.lang.ref.SoftReference ([email protected])
18: 1587 101568 java.lang.Class$ReflectionData ([email protected])
19: 134 93528 [C ([email protected])
命令:jmap -dump:format=b,file=heapdump.phrof pid
描述:生成堆转储快照dump文件。
以hprof二进制格式转储Java堆到指定filename的文件中。live子选项是可选的。如果指定了live子选项,堆中只有活动的对象会被转储。想要浏览heap dump,你可以使用jhat(Java堆分析工具)读取生成的文件。
这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,
并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用, 线上系统慎用。
命令:jmap -finalizerinfo pid
描述:打印等待终结的对象信息
xiaochai@xiaochaideMacBook-Air ~$ jmap -finalizerinfo 57459
No instances waiting for finalization found
https://www.jianshu.com/p/8d8aef212b25
https://www.jianshu.com/p/a4ad53179df3
https://blog.csdn.net/yx0628/article/details/80958488