zoukankan      html  css  js  c++  java
  • tomcat-9.0.20部署的问题及性能监控

      最近线上服务器扫描漏洞,扫描出tomcat三个中危漏洞,网上一搜,调的挺麻烦的,看最新的版本似乎都解决了这些漏洞,上tomcat官网下载了最新的9.0.20版本,我下的是压缩版本的,直接解压都可以用,没有配置环境变量,不太清楚配置环境变量除了可以随地启动还有什么好处,这边解压了tomcat目录之后,改了几个地方:

    1:启动窗口乱码,默认都是UTF-8的,但是控制台是GBK的,要保持一致
    打开tomcat目录下的conf/目录下logging.properties
    找到
    java.util.logging.ConsoleHandler.encoding = utf-8这行
    更改为
    java.util.logging.ConsoleHandler.encoding = GBK

    2:启动时候报这样的警告:
    警告 [main] org.apache.catalina.webresources.Cache.getResource
    无法将位于[/WEB-INF/classes/templates/framework/help/helpinfo.html]的资源添加到Web应用程序[/zhfx]的缓存中,
    因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间。
    解决办法:
    在 /conf/context.xml 的 </Context>前添加以下内容(大小默认是1024,单位是KB):
    <Resources cachingAllowed="true" cacheMaxSize="100000" />

    3:tomcat项目管理页面
    conf omcat-users.xml文件
    增加配置
    <role rolename="manager-gui"/>
    <user username="admin" password="123456" roles="manager-gui"/>
    登录8080端口页面,点击manager webapp输入账号密码进入管理页面

    4:设置jvm参数:
    bincatalina.bat文件打开
    262行左右,set JPDA= 下面一行添加

    set JAVA_OPTS=-Xms1024m -Xmx2048m -XX:PermSize=256M -XX:MaxNewSize=500m -XX:MaxPermSize=500m -Djava.awt.headless=true -XX:+PrintGCDetails


    参数解释:
    -Xms表示JVM Heap(堆内存)最小尺寸128MB,初始分配
    -Xmx表示JVM Heap(堆内存)最大允许的尺寸256MB,按需分配
    PermSizeMaxPermSize指明虚拟机为java永久生成对象(Permanate generation)
    如,class对象、方法对象这些可反射(reflective)对象分配内存限制,这些内存不包括在Heap(堆内存)区之中
    NewSize/MaxNewSize:定义YOUNG段的尺寸,
    NewSize为JVM启动时YOUNG的内存大小(young内存为堆中的新生代,保存刚实列化的对象);
    MaxNewSize为最大可占用的YOUNG内存大小。

    参数如果不理解,可以参考我转载的一篇博客,写的很详细:https://www.cnblogs.com/grasslucky/p/10900285.html

    5:注册为windows服务

    打开cmd窗口,window10用户记得用管理员权限打开,上次被坑了,进入tomcat下名的bin目录,查看service.bat文件是否存在,输入命令 service.bat install  ‘服务名’

    服务名可写可不写,然后看服务管理器,看是否添加好了,添加好了的话,进入属性设置为自动,这样如果服务器挂了也会自己启动,bin目录下启动tomcat9.exe,点击启动,ok。

    通过jmap性能监控:

    概述:命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

    命令:jmap -help:帮助信息

    命令:jmap -heap pid
    描述:显示Java堆详细信息

    打印一个堆的信息,包括使用的GC算法、堆配置信息和各内存区域内存使用信息

    显示参数详解:

    Heap Configuration:       //堆内存初始化配置
             MinHeapFreeRatio=40     //对应jvm启动参数-XX:MinHeapFreeRatio设置JVM堆最小空闲比率(default 40)
             MaxHeapFreeRatio=70  //对应jvm启动参数 -XX:MaxHeapFreeRatio设置JVM堆最大空闲比率(default 70)
             MaxHeapSize=512.0MB  //对应jvm启动参数-XX:MaxHeapSize=设置JVM堆的最大大小
             NewSize  = 1.0MB          //对应jvm启动参数-XX:NewSize=设置JVM堆的‘新生代’的默认大小
             MaxNewSize =4095MB   //对应jvm启动参数-XX:MaxNewSize=设置JVM堆的‘新生代’的最大大小
             OldSize  = 4.0MB            //对应jvm启动参数-XX:OldSize=<value>:设置JVM堆的‘老生代’的大小
             NewRatio  = 8         //对应jvm启动参数-XX:NewRatio=:‘新生代’和‘老生代’的大小比率
             SurvivorRatio = 8    //对应jvm启动参数-XX:SurvivorRatio=设置年轻代中Eden区与Survivor区的大小比值
              PermSize= 16.0MB       //对应jvm启动参数-XX:PermSize=<value>:设置JVM堆的‘永生代’的初始大小
              MaxPermSize=64.0MB  //对应jvm启动参数-XX:MaxPermSize=<value>:设置JVM堆的‘永生代’的最大大小
     
     
              Heap Usage:               //堆内存分步
              PS Young Generation
              Eden Space:          //Eden区内存分布
                capacity = 20381696 (19.4375MB)  //Eden区总容量
                used     = 20370032 (19.426376342773438MB)  //Eden区已使用
                free     = 11664 (0.0111236572265625MB)  //Eden区剩余容量
                99.94277218147106% used  //Eden区使用比率
             From Space:        //其中一个Survivor区的内存分布
                 capacity = 8519680 (8.125MB)
                 used     = 32768 (0.03125MB)
                 free     = 8486912 (8.09375MB)
                 0.38461538461538464% used
            To Space:            //另一个Survivor区的内存分布
                capacity = 9306112 (8.875MB)
                used     = 0 (0.0MB)
                free     = 9306112 (8.875MB)
                0.0% used
            PS Old Generation  //当前的Old区内存分布
                capacity = 366280704 (349.3125MB)
                used     = 322179848 (307.25464630126953MB)
                free     = 44100856 (42.05785369873047MB)
                87.95982001825573% used
            PS Perm Generation  //当前的 “永生代” 内存分布
                capacity = 3

    命令:jmap pid
    描述:查看进程的内存映像信息,类似 Solaris pmap 命令。

    使用不带选项参数的jmap打印共享对象映射,将会打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称。这与Solaris的pmap工具比较相似。

    命令:jmap -histo:live pid
    描述:显示堆中对象的统计信息

    其中包括每个Java类、对象数量、内存大小(单位:字节)、完全限定的类名。打印的虚拟机内部的类名称将会带有一个’*’前缀。如果指定了live子选项,则只计算活动的对象。

    命令:jmap -clstats pid
    描述:打印类加载器信息

    -clstats是-permstat的替代方案,在JDK8之前,-permstat用来打印类加载器的数据
    打印Java堆内存的永久保存区域的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。

    命令:jmap -finalizerinfo pid
    描述:打印等待终结的对象信息

    Number of objects pending for finalization: 0 说明当前F-QUEUE队列中并没有等待Fializer线程执行final

  • 相关阅读:
    7月的尾巴,你是XXX
    戏说Android view 工作流程《下》
    “燕子”
    Android开机动画bootanimation.zip
    戏说Android view 工作流程《上》
    ViewController里已连接的IBOutlet为什么会是nil
    My first App "Encrypt Wheel" is Ready to Download!
    iOS开发中角色Role所产生的悲剧(未完)
    UIScrollView实现不全屏分页的小技巧
    Apple misunderstood my app,now my app status changed to “In Review”
  • 原文地址:https://www.cnblogs.com/grasslucky/p/10901279.html
Copyright © 2011-2022 走看看