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。

  • 相关阅读:
    2016第5周四
    2016第5周三
    2016第5周二
    HTTP2.0那些事
    2016第4周日
    【C语言的日常实践(十二)】命令行参数
    Oracle改变字段类型
    Codeforces Round #269 (Div. 2)
    linux shell 命令
    Codeforces Round #256 (Div. 2) C. Painting Fence 或搜索DP
  • 原文地址:https://www.cnblogs.com/huigelaile/p/11176588.html
Copyright © 2011-2022 走看看