zoukankan      html  css  js  c++  java
  • Tomcat--远程Debug以及参数配置调优

    本文会讲解Tomcat远程Debug调试,Tomcat-manager监控(简单带过),psi-probe监控和Tomcat参数调优。本文基于Tomcat8.5版本。

    Tomcat远程Debug:

      远程Debug有些时候在通过日志无法找到原因的时候还是很有用的,所以了解使用很有必要。使用JDWP实现远程Debug,定义了调试器和被调试jvm

    之间的协议

      具体可以参考:https://www.ibm.com/developerworks/cn/java/j-lo-jpda3/

    首先修改远程Tomcat的startup.sh最后加上jpda

    exec "$PRGDIR"/"$EXECUTABLE" jpda  start "$@"

    然后修改catalina.sh

    通过搜索jpda,我们可以看到JPDA_OPTS的解释定义,添加了jpda启动,会生成最后两行输出

    #   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
    #                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
    #                   and JPDA_SUSPEND are ignored. Thus, all required jpda
    #                   options MUST be specified. The default is:
    #
    #                   -agentlib:jdwp=transport=$JPDA_TRANSPORT,
    #                       address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND

    JPDA_TRANSPORT:jpda 端口

    JPDA_ADDRESS:jpda IP地址

    然后修改红字部分,为定义的jpda的IP地址,默认localhost:8000,现在改成54321(随意改,只要不会重复),供远程debug使用

    if [ "$1" = "jpda" ] ; then
      if [ -z "$JPDA_TRANSPORT" ]; then
        JPDA_TRANSPORT="dt_socket"
      fi
      if [ -z "$JPDA_ADDRESS" ]; then
        JPDA_ADDRESS="54321"
      fi
      if [ -z "$JPDA_SUSPEND" ]; then
        JPDA_SUSPEND="n"
      fi
      if [ -z "$JPDA_OPTS" ]; then
        JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
      fi
      CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"
      shift

    我们随便写一个请求,然后把项目传到服务器上Tomcat的webapp目录,然后重启Tomcat

    在eclipse或者Intellij idea中配置remote调试,这里演示的是idea中的使用

    然后添加IP地址和jpda port

    然后debug启动remote,控制台会显示连接到目标VM

    然后通过浏览器或者postman等工具进行请求,在ide中就可以收到请求,然后进行debug

    tomcat-manager监控:

    低版本Tomcat默认开启,高版本Tomcat因为一些安全原因默认关闭了。文档地址:本机Tomcat安装地址webappsdocs

    步骤一:conf/tomcat-users.xml添加用户

    <role rolename="tomcat"/>
    <role rolename="manager-status"/>
    <role rolename="manager-gui"/>
    <user username="tomcat" password="123456" roles="tomcat,manager-status,manager-gui"/>

    步骤二:conf/Catalina/localhost/manger.xml配置允许的远程连接

    新建这个manager.xml文件,因为这个路径不存在的,需要重新创建,文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Context docBase="${catalina.home}/webapps/manager"
             privileged="true" antiResourceLocking="false" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127.0.0.1" />
    </Context>

    步骤三:重启

    打开:127.0.0.21:8080/manager/html,界面如下:

    点击最右边的Server Status,进入我们比较关心的内容

      实现jvm各个内存区域内存使用情况,我们使用的是8080端口,最大线程数200,当前线程数10,busy线程数,keep alive socket为1,最大处理时间,

    处理时间,请求数,错误请求数,接收数据,发送数据

    psi-probe监控:

      相比tomcat-manager监控功能更加强大,地址:https://github.com/psi-probe/psi-probe,下载之后,解压,执行

    mvn clean package -Dmaven.test.skip,在web/target存在probe.war,复制到Tomcat的webapp目录,然后启动Tomcat,顺便吐槽一下,这个打包时间

    巨长。。。

    PS:psi-probe同样需要tomcat-manager涉及的两个配置,完全相同的

    通过http:127.0.0.1:8080/probe/访问地址

    可以选择多种语言,包括中文

    可以查看数据源,直接选取war包发布到Tomcat、probe日志、线程

    可以查看不同信息:

     系统信息:

    内存使用情况:

     连接器:

    Tomcat参数优化:

      主要包括内存优化、线程优化、配置优化,其中内存优化会在后面jvm优化的时候统一讲一下,这里主要针对线程参数和其他参数配置

    线程相关配置:

    maxConnections:

      最大连接数,Tomcat8以后,连接使用NIO,默认接收10000个连接,不再像之前一样,一个请求使用一个线程。如果APR,默认8192,但是

    Windows下APR默认为1024的倍数,因为一些性能问题这样设计的。

    acceptCount:

      当请求超过maxConnections之后,后续的请求会存到队列中,能够存储的请求数量就是acceptCount,默认100。后续请求的请求就会被拒绝了。

    maxThreads:

      最大工作线程数量,同一时间处理的并发请求数,默认200,我们可以通过前面讲述的监控工具查看工作线程数量、内存、CPU,来决定工作线程数量

    minSpareThreads:最小空闲的工作线程,不要设置太小,否则如果请求突然增加,就会出现一个停顿

    其他相关配置:

    autoDeploy:

      Tomcat在运行的时候是否定期检查有新的应用或者应用更新,生产环境下一定要设置为true,我们可以在server.xml看到这个参数

    <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">

    enableLookups:

      如果要调用request.getRemoteHost()以执行DNS查找以返回远程客户端的实际主机名,则设置为true。 设置为false以跳过DNS查找并以字符串形式

    返回IP地址(从而提高性能)。 默认情况下,DNS查找被禁用,Tomcat8.55已经对这个参数做了优化。生产环境下设置为false,DNS查询和网络相关,会

    影响性能。

    reloadable:

      如果希望Catalina监视/ WEB-INF / classes /和/ WEB-INF / lib中的类以进行更改,则设置为true;如果检测到更改,则自动重新加载Web应用程序。 这

    个参数在自己本地开发环境可以使用,生产环境需要设置为false。

  • 相关阅读:
    C#操作REDIS例子
    A C# Framework for Interprocess Synchronization and Communication
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    开源项目选型问题
    Mysql命令大全——入门经典
    RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH 详解(引用)
    zabbix邮件报警通过脚本来发送邮件
    centos启动提示unexpected inconsistency RUN fsck MANUALLY
    rm 或者ls 报Argument list too long
    初遇Citymaker (六)
  • 原文地址:https://www.cnblogs.com/huigelaile/p/11176588.html
Copyright © 2011-2022 走看看