-
Notifications
You must be signed in to change notification settings - Fork 20
JvmPerformance
目录 start
目录 end|2019-04-22 16:30|
-
xxfox
Jvm参数辅助工具
-server
-Xms600m # 最小堆
-Xmx600m # 最大堆 配成一样是为了避免扩容
-Xmn256m # 新生代
-XX:MetaspaceSize=350m # 只是一个阈值, 达到该阈值才进行 GC
-XX:MaxMetaspaceSize=350m # 最大值
-Xnoclassgc
-Xverify:none # 不进行字节码校验
-XX:+AggressiveOpts # 激进式优化
-XX:ReservedCodeCacheSize=320m # 编译时代码缓存 IDEA 警告不能低于240M
参考博客: Java’s -XX:+AggressiveOpts: Can it slow you down?
参考博客: JVM参数MetaspaceSize的误解
堆外内存堆外内存主要是JNI、Deflater/Inflater、DirectByteBuffer(nio中会用到)使用的。
都是jdk的bin目录下的工具
主要用来输出JVM中运行的进程状态信息
- option:
- -q 忽略输出的类名、Jar名以及传递给main方法的参数,只输出pid。
- -m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。
- -l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。
- -v 输出传给JVM的参数。
- -V 输出通过标记的文件传递给JVM的参数(.hotspotrc文件,或者是通过参数-XX:Flags=指定的文件)
-
option:
- -gcutil 统计heap的gc情况
- -t 在第一列输出时间戳。该时间戳从jvm启动开始
- -h3 每隔N行输出一次列表头
- $PID 进程号
- interval 输出间隔时间,单位毫秒
- count 输出次数
-
Demo:
jstat -gcutil -t -h5 7919 1000 50
观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数
- Demo:
- jinfo 14352
- jinfo -sysprops 14352
- jinfo -flags 14352
- jinfo -flag MaxPermSize 14352
用来查看堆内存使用状况
- Demo:
- jmap -histo $PID 展示class的内存情况
- jmap -heap $PID 展示Java堆详细信息
- jmap -dump:live,format=b,file=heapLive.hprof 2576
Java Head Analyse Tool
用于分析 jmap 转储出来的堆文件, 分析完后启动一个WebServer 通过浏览器查看
jstack [option] pid 主要用来查看某个Java进程内的线程堆栈信息
- Option:
- -F: 强制产生一个线程dump
- -m: 打印java和native frames
- -l: 打印关于锁的附加信息
- Demo:
- jstack -F $PID
Github: Arthas
阿里巴巴
vjtools
唯品会
Local
Remote
- 通常使用两种方式连接远程JVM: JMX jstatd
jmx
jstatd
- vim jstatd.all.policy
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
- jstatd -J-Djava.security.policy=jstatd.all.policy -p 12028 -J-Djava.rmi.server.logCalls=true
- open jvisualvm create a remote with jstatd by above port 12028
Memory Analyzer tool(MAT) | Official Site
他的 OQL 比较方便, 像写 SQL 一样去查询对象
注意: 有这样的一种场景, 从数据库获取大量的数据创建为对象, 导致瞬间的OOM 这时候即使使用 jmap 去 dump 了快照, 也看不到占用大量内存的对象, 很有可能这些对象就是gc不可达的, 而mat只能分析可达对象
-
【 Algorithm 】
-
【 Blog 】
-
【 C 】
-
【 Database 】
-
【 Distributed 】
-
【 FrontEnd 】
- 【 FrontEnd/Frame 】
- 【 FrontEnd/Node 】
- Font
- Hexo
- JavaScript
- LearnPS
- ResponseCode
- SVG
- ViewSolution
- extjs学习笔记
-
【 Functional 】
-
【 Go 】
-
【 Groovy 】
-
【 Java 】
- 【 Java/AdvancedLearning 】
- 【 JavaBasic 】
- 【 JavaCache 】
- 【 JavaCollection 】
- 【 JavaConcurrency 】
- 【 JavaMap 】
- Annotation
- ClassFile
- Collection
- Concurrency
- Deploy
- Exception
- ExtendsAndInterface
- Generics
- IO
- JDBC
- JDKAndJRE
- JMX
- JVM
- Java11
- Java7
- Java8
- JavaNetwork
- JavaReleaseVersion
- JavaWeb
- JvmPerformance
- MQ
- MultipleLanguage
- Proxy
- Reflection
- Serialize
- SyntaxAndType
- Thread
- WebPerformance
- 【 Java/Android 】
- 【 Java/Ecosystem 】
- 【 Java/MSA 】
- 【 Java/Spring 】
- 【 Java/TemplateEngine 】
- 【 Java/Test 】
- 【 Java/Tool 】
- 【 Java/thread 】
- AlibabaJavaStandard
- DesignPattern
- HashMap解析
- Java-NIO
- Java虚拟机
- Log
- MIS
- Quartz
- RESTful
- WebSocket学习笔记
- ZooKeeper学习笔记
- android学习笔记
- 【 Java/AdvancedLearning 】
-
【 Kotlin 】
-
【 Linux 】
- 【 Linux/Alpine 】
- 【 Linux/Arch 】
- 【 Linux/Base 】
- 【 Linux/Centos 】
- 【 Linux/Container 】
- 【 Linux/Debian 】
- 【 Linux/Tool 】
- JavaDevInit
- Linux系统学习
-
【 MyBlog 】
-
【 Python 】
- 【 Python/Tool 】
- Python
- PythonConcurrent
- PythonGUI
- PythonGame
- PythonNet
- PythonOffices
- PythonWeb
- Python基础
- Python核心学习
-
【 Reactive 】
-
【 Rust 】
-
【 Scala 】
-
【 Script 】
-
【 Skills 】
- 【 Skills/Application 】
- 【 Skills/CS 】
- 【 Skills/Cache 】
- 【 Skills/Councurrency 】
- 【 Skills/DevOps 】
- 【 Skills/Document 】
- 【 Skills/Ecology 】
- 【 Skills/Network 】
- 【 Skills/Search 】
- 【 Skills/SoftwareEngineering 】
- 【 Skills/Spider 】
- 【 Skills/Test 】
- 【 Skills/Vcs 】
- 【 Skills/Work 】
- AppManual
- CelebrityQuotes
- Miscellaneous
- Platform
- Problem
- Protobuf
- RegularExpression
- SoftwareDesignEngineer
- Website
-
【 Windows 】