Tomcat优化贼jb全

监控Tomcat状态

  • 开发Java监控页面

    mkdir /usr/local/tomcat8/webapps/meminfo
    vim /usr/local/tomcat8/webapps/meminfo/meminfo.jsp
    ...
    
  • 使用jps命令

  • Tomcat远程监控功能

    vim /usr/local/tomcat8/bin/catalina.sh
    CATALINA_OPTS="$CATALINA_OPTS
    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=12345    #开启端口
    -Dcom.sun.management.jmxremote.authenticate=false  #关闭
    -Dcom.sun.management.jmxremote.ssl=false  #关闭ssl
    -Djava.rmi.server.hostname=192.168.200.10"  #调节自己端口
    
    启动Tomcat,查看12345端口
    

    在Windows上下载jbk环境。启动jconsole.exe软件会出现一个图像化的监控页面

Tomcat故障排查步骤

Tomcat安全优化

  • 当Tomcat完成安装后你首先要做的事情如下:
    首次安装完成后立即删除webapps下面的所有代码
    rm -rf /srv/apache-tomcat/webapps/*
    注释或删除 tomcat-users.xml 所有用户权限,看上去如下:

    cat conf/tomcat-users.xml
    <?xml version='1.0' encoding='utf-8'?>
    
    <tomcat-users>
    </tomcat-users>
    
  • 隐藏tomcat版本
    01.首先找到这个jar包,$TOMCAT_HOME/lib/catalina.jar
    02.解压catalina.jar之后按照路径\org\apache\catalina\util\ServerInfo.properties找到文件
    03.打开ServerInfo.properties文件修改如下:把server.number、server.built置空

     server.info=Apache Tomcat
     server.number=
     server.built=
    

    04.重新打成jar包,重启tomcat。

  • 管理端口号

    修改./conf/server.xml

    #修改8080端口=自带的web站点端口
    <Connector port="8080"
                 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                 enableLookups="false" redirectPort="8443" acceptCount="100"
                 connectionTimeout="20000" disableUploadTimeout="true">/
    
    #修改8009端口=外带Apache/nginx端口
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
    #修改8005端口=监听停止端口
    <Server port="8005" shutdown="SHUTDOWN">
    
    
  • 禁用管理端:删除默认安装目录,以及webapps目录下的所有默认项目

  • 降权启动:自己用户和组启动,

  • 修改404等错误页面:./conf/web.xml,也可以重定向

  • 访问日志格式:添加访问日志格式,方便更好的查看

Tomcat运行模式

  • bio:同步并阻塞:服务器模式实现一个连接一个线程。==最好的,适用于连接数目小且固定的架构,对服务器的资源要求较高,且多并发性一般。

  • nio:同步非阻塞:服务器模式请求一个请求一个线程,即,会将请求注册到多路复用器上,进行轮询启动线程处理。==速度一般,适用于连接数目多且连接比较少(轻操作)的架构,有更好的并发性。默认,也常用

  • aio(nio2):异步非阻塞:一个有效的请求一个线程,客户端的io请求都是由os请求完成后在通知服务器启动线程处理。==速度最快,最快的,性能最好

  • 优化nio

    vim /usr/local/tomcat8/conf/server.xml
    <Connector port="8080" protocol="HTTP/1.1" #将protocol修改为org.apache...进行优化
                 connectionTimeout="20000"
                 redirectPort="8443" />
    
  • 修改模式aip

    rpm -e apr --nodeps  #确认是否有
    yum -y install apr apr-devel  #下载
    cd /usr/local/tomcat8/bin/  
    cp tomcat-native.tar.gz /root/  
    tar xf tomcat-native.tar.gz 
    cd tomcat-native-1.2.12-src/
    cd native/
    ./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/local/java && make && make install
    vim /usr/local/tomcat8/bin/catalina.sh  #修改配置文件,设置变量
    CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
    vim /etc/profile  #设置环境变量
    export CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib
    source /etc/profile  #重新识别
    cat /usr/local/tomcat8/logs/catalina.out  #查看日志
    26-Sep-2021 19:17:31.460 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
    
    vim /usr/local/java/jre/lib/security/java.security  #关闭8005端口
    securerandom.source=file:/dev/urandom
    

Tomcat线程池

在Tomcat中每一个请求都是一个线程,所以可以使用线程池(连接器),来提高性能

  • 线程池:多线程处理形式,将任务添加成队列,创建线程自动于后台启动。

  • 开启并使用

posted @ 2021-09-27 11:07  whml  阅读(43)  评论(0编辑  收藏  举报