你们生产环境中的tomcat是如何设置jvm参数的,如何检查jvm运行情况的.

    如果你是tomcat部署的Javaweb系统, jvm进程对应自己的tomcat自己, 你的系统仅仅是在tomcat的jvm进程来执行的
    tomcat的一个配置脚本, catalina 脚本里面去找一下.

    内存区域大小的分配,每个线程的栈的大小,metaspace 大小,堆内存的大小, 年轻代和老年代分别的大小,
    eden和 survivor区域的大小分别是多少.

    JVM的使用无非就是划分几块儿内存区域,然后往里面填充对象,然后可能会触发GC垃圾回收,依靠GC垃圾回收器去进行垃圾回收.

    年轻代用的什么垃圾回收器, 老年代用的什么垃圾回收器.


    当前线上系统运行的时候,JVM的表现如何?


    需要在一定的业务背景下,如何对系统运行时的对象数量进行预估,.对内存的压力进行预估,对整个JVM运行的状态进行预估,预估完成之后,根据预估的情况,去设置一些JVM参数.

    进行压测.,在压测的时候,其实就是需要观察jvm的运行的情况,jstat工具去分析jvm运行的情况,它的年轻代里面eden区域的对象增长的情况. ygc的频率,每次ygc过后有多少对象的存活,然后就是survivor区域能不能放得下,老年代对象增长的速率,老年代多久会触发一次Full GC.
    就可以根据压测的情况进行一定的jvm参数的调优,一个是系统的qps,一个是系统的接口的性能,压测到一定的程度的时候,机器的cpu,内存,io,磁盘的一些负载情况,jvm的表现.


    根据压测的结果,可能需要对一些代码进行优化,优化性能,减轻cpu或者io和磁盘负担啥的.

    或者是发现jvm 的gc过于频繁了,内存泄露.此时就需要对jvm的各个内存区域的大小以及一些参数进行调优等等.

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