Skip to content

Latest commit

 

History

History
55 lines (15 loc) · 3.06 KB

File metadata and controls

55 lines (15 loc) · 3.06 KB

41、你们生产环境中的Tomcat是如何设置JVM参数的?如何检查JVM运行情况?

面试的时候,面试官很多时候都是针对jvm的一些运行原理去深扣,结合我讲的东西,然后去把jvm专栏里面的内容仔细看一下,应付面试都是很容易的,一般来说都会这么问,你们线上系统的生产环境的jvm参数是怎么来配置的,为什么要这么配置,在你们配置的这个参数之下,线上系统jvm运行的情况如何

你确实必须得去看一下你当前生产系统的jvm参数都是如何设置的,如果说你是tomcat部署的java web系统,jvm进程对应的tomcat自己,你的系统仅仅是在tomcat的jvm进程来执行

tomcat的一个配置脚本,catalina脚本里去找一下,jvm专栏都有说明的,里面是有对应的tomcat启动的一些jvm参数的设置

比如通过java命令直接启动你的一个main方法跑起来的系统,就是你自己启动的时候,java命令可以带上一些jvm参数

对你自己系统的jvm参数有一个了解,内存区域大小的分配,每个线程的栈大小,metaspace大小,堆内存的大小,年轻代和老年代分别的大小,eden和survivor区域的大小分别是多少,如果没有设置,会有一些默认值

jvm专栏里,在中间有一些地方,他是讲了一些命令的,可以查看jvm的启动默认参数

垃圾回收器,年轻代是用了什么,老年代,每种垃圾回收器是否有对应的一些特殊的参数有设置,那些特殊的参数分别都是用来干什么的

为什么要这么设置呢?当前线上系统运行的时候,jvm的表现如何?

救火队队长的《从0开始带你成为jvm实战高手》,有大量的实战案例的讲解,业务背景引出,在一定的业务背景之下,如何去进行系统运行时的对象数量的预估,对内存的压力进行预估,对整个jvm运行的状况进行预估

预估完毕之后,根据预估的情况,可以去设置一些jvm参数

进行压测,在压测的时候,其实就需要去观察jvm运行的情况,jstat工具去分析jvm运行的情况,他的年轻代里的eden区域的对象增长的情况,ygc的频率,每次ygc过后有多少对象存活,s能否放的下,老年代对象增长速率,老年代多久会触发一次fgc

就可以根据压测的情况去进行一定的jvm参数的调优,一个系统的QPS,一个是系统的接口的性能,压测到一定程度的时候 ,机器的cpu、内存、io、磁盘的一些负载情况,jvm的表现

可能需要对一些代码进行优化,比如优化性能,或者减轻一点cpu负担,减轻io和磁盘负担,发现jvm的gc过于频繁,内存泄漏,此时就需要对jvm的各个内存区域的大小以及一些参数进行调优

跑到线上实际生产环境里去,运行的过程中,也需要基于一些监控工具,或者是jstat,除了观察系统的QPS和性能,接口可用性,调用成功率,机器的负载,jvm的表现,gc的频率,gc耗时,内存的消耗