企业网站免费推广的方法.,wordpress 微信文章,企业logo设计平台,公司如何建设网站命令行工具
jps
虚拟机进程状况查询工具
jps(JVM Process Status Tool)#xff0c;可以列出正在运行的虚拟机进程#xff0c;并显示虚拟机执行主类名称或者jar文件名#xff0c;还有这些进程的本地虚拟机唯一ID(LVMID#xff0c;Local Virtual Machine Identifier)。 # …命令行工具
jps
虚拟机进程状况查询工具
jps(JVM Process Status Tool)可以列出正在运行的虚拟机进程并显示虚拟机执行主类名称或者jar文件名还有这些进程的本地虚拟机唯一ID(LVMIDLocal Virtual Machine Identifier)。 # Windows找出正在运行的java程序
tasklist /fi imagename eq java.exe# linux系统找出正在运行的java程序
ps -ef | grep java # hostid为远程主机的标识符,需要远程主机在RMI中注册过
jps [options] [hostid]
options作用-q仅显示进程id不显示类名、jar名称等信息-l显示主类的全限定名称或者启动的jar文件名称-m显示传递给main方法的参数-v显示虚拟机进程启动的JVM参数
jstat
虚拟机统计信息监控工具
jstat(JVM Statistics Monitoring Tool)用户监控虚拟机各项运行状态的工具如类加载、内存、垃圾收集、即使编译器等运行时数据。
# 本地虚拟机的vmid和lvmid是一致的
# 远程虚拟机的vmid格式[protocol:][//]vmid[hostname[:port]/servername]
# interval count 表示间隔多长时间输出,总共输出多少次,不传默认只输出一次
jstat option vmid [interval[s|ms] [count] ] jstat -gc pidS0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
26176.0 26176.0 0.0 2160.1 209792.0 165183.1 262144.0 69936.9 131072.0 123923.2 16384.0 15168.7 451 4.319 198 52.246 56.565jstat -gccause pidS0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC 0.00 0.00 9.23 26.73 94.55 92.59 453 4.328 289 76.291 80.619 CMS Final Remark No GC
列名含义S0CSurvivor0区域的容量S1CSurvivor1区域的容量S0USurvivor0区域的使用量S1USurvivor1区域的使用量ECEden区域的容量EUEden区域的使用量OC老年代的容量OU老年代的使用量MC表示Metaspace(元空间)区域的容量MU表示Metaspace(元空间)区域的使用量CCSC压缩类空间的容量CCSU压缩类空间的使用量YGC年轻代垃圾回收次数YGCT年轻代垃圾回收的总时间(秒)FGC老年代垃圾回收次数FGCT老年代垃圾回收的总时间(秒)GCT表示垃圾回收的总时间(秒)
option作用-class监控类加载、卸载数量、总空间及类加载所耗费的时间-gc监控Java堆状况Eden、2个Survivor、老年代等使用情况垃圾收集时间-gccapacity和gc相差不大主要关注Java堆中各个区域使用到的最大最小空间-gcutil和gc相差不大关注各个空间的使用占比-gccause与gcutil功能一样会额外输出导致上一次GC产生的原因-gcnew监控新生代垃圾收集情况-gcnewcapacity与gcnew相差不大主要关注使用到的最大和最小空间-gcold监控老年代垃圾收集情况-gcoldcapacity-gcpermcapacityJDK8移除-compiler输出即时编译器编译过的方法耗时等信息-printcpmpilation输出已经被即时编译器编译的方法
jinfo
配置信息工具
jinfo(Configuration Info for Java)的作用是实时查看和调整虚拟机各项参数。
# pid-进程id
jinfo option pid# -flag MetaspaceSize256m -flag MaxMetaspaceSize512m
jinfo -flag UseStringDeduplication pid
可以通过jinfo -flag获取可选参数 option作用-flag JVM参数名称name虚拟机启动对应JVM参数的配置-flag [|-] JVM参数名称name去激活或关闭某个JVM参数开关-flag namevalue设置对应JVM参数的值-flags打印对应JVM虚拟机进程的启动信息-sysprops打印Java经常System.getProperties()的内容信息空打印-flags 和-sysprops对应的信息 jmap
内存镜像工具
jmap(Memory Map for Java)名用于生成堆转存快照(heapdump或dump文件)。
通过JVM参数-XX:HeapDumpOnOutOfMemoryError在Java程序出现内存溢出错误之后自动生成demp文件。
通过JVM参数-XXHeapDumpOnCtrlBreak参数可以使用ctrlbreak让虚拟机生成dump文件或者在Linux系统使用kill -3命令。
# 虚拟机进程id,一般情况下同进程id
jmap option vmidjmap -dump:[live,]formatb,filefilename.hprof vmid
jmap -dump:[live,]formatb,filefilename.bin vmid option作用-dumplive只dump出存活的对象,formatb表示文件内容为二进制文件file表示转存的文件名-finalizerinfofinalize队列中等待执行的对象。对象要实现finalize方法才会进入-heap显示堆详细信息哪种回收器、参数配置合集容量-histo显示堆中对象统计信息、包括类、实例数量、合计容量-permstat以ClassLoader为统计口径显示永久代内存容量(1.8弃用)-clstats打印类加载统计的信息-F-dump选项没有作用时前置生成dump文件空 jhat
堆转存快照分析攻击
jhat(JVM Heap Analysis Tool)来分析jmap生成的dump文件。jhat内置了一个http/web服务器生成堆转存快照文件之后可以在浏览器查看。这个直接看是真的看不懂。
jhat dump文件 jstack
Java堆栈跟踪工具
jstack(Stack Trace for Java)用于生成当前时刻的线程快照(threaddump或javacore文件)。
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合生成线程快照的作用通常是定位线程出现长时间停顿的原因如线程死锁、死循环、请求外部资源导致的长时间挂起等。
Thread.getAllStackTraces()可以获取虚拟机所有线程的StackTraceElement对象。
jstack option vmid option作用-F当正常输出不被响应强制输出线程堆栈信息-l出堆栈外显示关于锁的附加信息-m调用到本地方法可以显示C/C的堆栈 Service Thread是线程的名称
#19是线程的id
daemon表示是守护线程(在main介绍自动退出)
prio9表示线程的优先级
os_prio表示操作系统级别线程的优先级
tid0x00000000140b8800表示线程的本地id
nid0xa2c表示操作系统层面线程的本地id
runnable表示线程处于可运行状态
0x0000000000000000是线程堆栈的起始地址
java.lang.Thread.State: RUNNABLE表示线程的状态RUNNABLE表示当前线程正在运行或者可运行
Locked ownable synchronizers表示线程有用的同步锁的信息-None表示未拥有任何锁。 可视化工具
JHSDB 在JDK9版本才开始支持。
JHSDB(Java HotSpot Debugger)是Java HotSpot虚拟机的调试工具运行开发人员在运行时检查和调试Java程序。
jhsdb hsdb --pid vmid Heap Parameters
Tool Heap Parameters可以看到下面Gen 0Enen区内存已经使用满了。S0、S1、老年代都没有被使用。 scanoops start end [type]
scanoops 0x0000020c2ec00000 0x0000020c2ef50000 Object #使用这个提示找不到这个类型 no usch type
scanoops 0x0000020c2ec00000 0x0000020c2ef50000 java.lang.Object Inspector
可以使用Tool Inspector工具查看对象的类名、继承关系、实现接口关系、方法、字段、运行时常量池的指针 revptrs
revptrs查找对象的指针引用。
revptrs 对象地址 # 下面结果输出哪个类型的对象引用了它
revptrs 0x0000020c2eea92f8 # Object staticObject
revptrs 0x0000020c2eea9308 # JHSDBTest jhsdbTest
revptrs 0x0000020c2eea9320 # Object instanceObject
revptrs 0x0000020c2eea9330 # Object obj
可以先猜测一下92f8这个Object对象应该是一个静态遍历因为这个和Class相关可以取0x0000020c2eea8db0使用Inspector工具检查发现其中真的是有一个staticObject对象地址也是对上的。这也验证了Java将静态属性存储在Class对象中存储在Java堆(这里Eden)中。
0x0000020c2eea9320看结果和0x0000020c2eea9308这个对象应该是JHSDBTest的实例属性。Inspector下图结果可验证。
看到main方法里面对象没有任何执行猜测0x0000020c2eea9330这对象应该是在方法里面那个Object对象。
可以有一个小的总结在方法里面的局部变量他是没有一个具体的指向的意味着方法结束这个对象就找不到了可能就会被垃圾收集器收集。
资料说revptrs不支持查找栈上面的指针引用。 Stack Memory
Java Threads窗口可以查看线程的栈内存使用情况。怎么看这个图 Stack Memory图怎么看
JConsole
工具使用官网文档https://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html
JConsole(Java Monitoring and Management Console)是一款基于JMX(Java Management Extensions)规范的可视化监视、管理工具。
Java Management Extensions(JMX)是一种用于管理和监视Java应用程序的框架。它允许开发人员在应用程序中集成管理功能以便远程或本地监控和管理Java应用程序的运行时行为。JMX提供了一组标准接口和工具使得可以在运行时动态地管理Java应用程序的各个方面包括性能监控、配置管理、事件通知等。
使用JMX开发人员可以将MBeans(Managed Beans)嵌入到他们的应用程序中这些MBeans代表了应用程序的不同组件或模块。这些MBeans可以通过JMX代理进行注册然后可以通过JMX管理器远程或本地访问这些MBeans以获取有关应用程序状态、性能和配置的信息并且可以执行一些管理操作。
使用jconsole连接远程服务器上的Java程序在启动时需要加上其它特别的参数。 # 远程启动需要的参数
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port12345 \ # 替换为您选择的端口号
-Dcom.sun.management.jmxremote.authenticatefalse \
-Dcom.sun.management.jmxremote.sslfalse \内存监控
可以观察到堆内存占用在慢慢提高然后突然降低而后又慢慢提高然后再降低。
第一次的慢慢提高是因为method方法指向又对象在不停的创建方法指向完成之后代码中手动触发了GCmethod方法创建的对象被回收所以内存占用降低。
第二次慢慢提高不知道为什么降低是因为手动点了监控界面的执行GC。 线程监控 线程死循环 线程死锁 VisualVM
export https_proxyhttp://127.0.0.1:33210 http_proxyhttp://127.0.0.1:33210 all_proxysocks5://127.0.0.1:33211
VisualVM是一个用于监控、分析和调优Java虚拟机JVM性能的可视化工具。 关门的默认打开窗口可以在窗口应用程序/充值窗口重新打开。 远程插件 需要手动下载再安装插件
线程监控 Java Mission Control
Java Mission Control(JMC)是一个用于监控和管理Java应用程序性能的工具通常与Java Flight Recorder(JFR)结合使用。