前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM调优调的是什么?是寂寞吗?

JVM调优调的是什么?是寂寞吗?

作者头像
疯狂的KK
发布2020-10-27 10:12:18
7720
发布2020-10-27 10:12:18
举报
文章被收录于专栏:Java项目实战

不,是GC。

gc永远会是Java程序员需要考虑的不稳定因素之一。对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。

而GC的情景复杂又复杂,为了能更深刻的了解内存模型,参考《深入java虚拟机理解》,不定期更新JVM入门。

我自己遇到过一次内存泄漏,但不是线上环境,本地环境出现过一次,后来重新推包解决了,没有复现,那么平时的自用服务器突然内存与磁盘IO暴增,你会如何调优?定位到具体线程后,是因为大对象占用空间造成,还是程序死循环了你如何解决?,关于JVM入门,以及JVM调优整理了地址请转至

代码语言:javascript
复制
https://kkget.github.io/2020/09/24/JVM调优相关
https://kkget.github.io/2020/10/13/JVM从入门到放弃

以上内容不定期更新,今天主要从性能监控工具以及整理关于调优相关部分。

虚拟机性能监控工具

1.jps(JVM Porcess Status Tool)

代码语言:javascript
复制
功能:列出正在运行的虚拟机程序并显示执行主类名称以及进程ID(LVMID ,Local Virtiual Machine Identifier)。
代码语言:javascript
复制
jps -l  输出主类的全类名
jps -v  输出虚拟机启动时的JVM参数
格式 jps [ options ] [ hostid ]
[root@zhaokk shell]# jps -v
2288193 Jps -Denv.class.path=$:CLASSPATH:/opt/soft/jdk/jdk1.8.0_261/lib/ -Dapplication.home=/opt/soft/jdk/jdk1.8.0_261 -Xms8m
2171556 jar -Xmx1024m
2195236 jar -Xmx1024m
2172742 jar -Xmx1024m
1351582 jar -Xmx1024m
2136682 jar -Xmx1024m
2236393 jar
2240457 jar -Xmx1024m
2135436 jar -Xmx1024m
2286668 jar -Xmx1024m
3087 jar -Xmx1024m
2160978 jar -Xmx1024m
2176083 jar -Xmx1024m
2287761 jar
2196085 jar -Xmx1024m

2.jstat(JVM Statistics Monitoring Tool)

代码语言:javascript
复制
jstat [option vmid]
jstat -gc 2764 250 20
[root@zhaokk shell]# jstat -gc 1477 250 20
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
1536.0 1536.0  0.0   110.5  12480.0   2207.5   31084.0    24310.8   24320.0 23552.8 2560.0 2340.8    259    0.589   1      0.051    0.640
代码语言:javascript
复制
jstat -gcutil 2764
[root@zhaokk shell]# jstat -gcutil 1477
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
  0.00   7.19  19.05  78.21  96.85  91.44    259    0.589     1    0.051    0.640

3.jinfo java配置信息(Configuration Info for java)

代码语言:javascript
复制
格式  jinfo [option] pid

4.jmap (Memory Map for java) java内存映射工具

代码语言:javascript
复制
格式 jmap [option] vmid

jmap -heap 
[root@zhaokk shell]# jmap -heap 1477
Attaching to process ID 1477, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.11-b03

using thread-local object allocation.
Mark Sweep Compact GC

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 482344960 (460.0MB)
   NewSize                  = 1310720 (1.25MB)
   MaxNewSize               = 160759808 (153.3125MB)
   OldSize                  = 30146560 (28.75MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 14352384 (13.6875MB)
   used     = 4124624 (3.9335479736328125MB)
   free     = 10227760 (9.753952026367188MB)
   28.738250035673516% used
Eden Space:
   capacity = 12779520 (12.1875MB)
   used     = 4011512 (3.8256759643554688MB)
   free     = 8768008 (8.361824035644531MB)
   31.390161758814102% used
From Space:
   capacity = 1572864 (1.5MB)
   used     = 113112 (0.10787200927734375MB)
   free     = 1459752 (1.3921279907226562MB)
   7.19146728515625% used
To Space:
   capacity = 1572864 (1.5MB)
   used     = 0 (0.0MB)
   free     = 1572864 (1.5MB)
   0.0% used
tenured generation:
   capacity = 31830016 (30.35546875MB)
   used     = 24894208 (23.740966796875MB)
   free     = 6935808 (6.614501953125MB)
   78.20985072706216% used
15847 interned Strings occupying 1391576 bytes.

5.jhat (JVM Heap Analysis Tool)虚拟机堆转快照分析工具 用的比较少

6.jstack java堆栈追踪工具(stack Trace for java) 生成当前的线程快照

代码语言:javascript
复制
格式 jstack [option] vmid
[root@zhaokk bin]# jstack -l 1477
2020-10-20 15:40:50
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.11-b03 mixed mode):

"Attach Listener" #27 daemon prio=9 os_prio=0 tid=0x00007fc928003800 nid=0x446f waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
  - None

"http-bio-8080-AsyncTimeout" #25 daemon prio=5 os_prio=0 tid=0x00007fc95039f000 nid=0x5de waiting on condition [0x00007fc92d0cb000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
  at java.lang.Thread.sleep(Native Method)
  at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:153)
  at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
  - None

"http-bio-8080-Acceptor-0" #24 daemon prio=5 os_prio=0 tid=0x00007fc95039d800 nid=0x5dd runnable [0x00007fc92d1cc000]
   java.lang.Thread.State: RUNNABLE
  at java.net.PlainSocketImpl.socketAccept(Native Method)
  at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:404)
  at java.net.ServerSocket.implAccept(ServerSocket.java:545)
  at java.net.ServerSocket.accept(ServerSocket.java:513)
  at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
  at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:223)
  at java.lang.Thread.run(Thread.java:745)
   Locked ownable synchronizers:

亦可通过java程序Thread.getAllstackTraces();获得

可视化故障处理工具

Jconsole JHSDB Visual VM JMC

个人常用Jconsole ,Visual VM.

临时有活整理到这...后续有时间再整理

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 赵KK日常技术记录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
应用性能监控
应用性能监控(Application Performance Management,APM)是一款应用性能管理平台,基于实时多语言应用探针全量采集技术,为您提供分布式性能分析和故障自检能力。APM 协助您在复杂的业务系统里快速定位性能问题,降低 MTTR(平均故障恢复时间),实时了解并追踪应用性能,提升用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档