• centos 6.5 安装 tomcat8 及性能优化_虚拟主机


    Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。

    Tomcat和Nginx、Apache(httpd)、lighttpd等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。

    不过,Tomcat处理静态HTML的能力不如Nginx/Apache服务器
    --------------------------------------------------------------------
    作者:rightlzc   来源:CSDN
    原文:https://blog.csdn.net/rightlzc/article/details/82720553

    Tomcat 当然是需要JDK的了,直接用了我之前的笔记中JDK的部分

    #-----------------------首先需要安装好Java------------------------------
    rpm -qa | grep java #先查看自带java 如果有就卸载
    rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115 #卸载
    rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5  #卸载
    #或者yum -y remove 卸载
    yum -y remove java-1.4.2-gcj-compat #
    
    # 使用挂载方式或sftp上传java到主机,或者winscp工具
    # secureCRT中alt+p可开启sftp. 或者安装lrzsz
    yum -y install lrzsz #安装后,rz上传,sz下载
    
    # 如果是tar包, 就tar zxvf jdk-8u161-linux-x64.tar.gz
    cd /usr/local/src/jdk1.8.0_161
    
    # 修改用户下面的 .bash_profile文件,也可以用root用户修改/etc/profile文件
    vim /etc/profile
    ...
    export JAVA_HOME=/usr/local/src/jdk1.8.0_161
    export PATH=$PATH:$JAVA_HOME/bin
    :wq
    
    source /etc/profile #重新加载这个配置文件
    which java
    java -version
    # 如果要查找是否有过tomcat
    find / -name tomcat
    

     

    安装Tomcat:

    #-------------------------- tomcat -------------------------------------
    # 下载
    wget https://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.53/bin/apache-tomcat-8.0.53.tar.gz
    tar zxvf apache-tomcat-8.0.53.tar.gz
    mv apache-tomcat-8.0.53 tomcat8053
    cd tomcat8053/bin
    ./startup.sh  # 启动
    ./shutdown.sh # 停止
    
    ./catalina.sh version   # 查看版本

    开启 web 管理界面,不是必须的。通常仅用于开发测试。

    # 修改 conf/tomcat-users.xml 文件,可以使用web进入manager-gui 管理界面
      <role rolename="manager"/>
      <role rolename="manager-gui"/>
      <role rolename="admin"/>
      <role rolename="admin-gui"/>
      <user username="admin" password="123456" roles="admin-gui,admin,manager-gui,manager"/>

    -------------------------------- server.xml组件类别
    顶级组件       :位于整个配置的顶层,如server。
    容器类组件   :可以包含其它组件的组件,如service、engine、host、context。
    连接器组件   :连接用户请求至tomcat,如connector。
    被嵌套类组件:位于一个容器当中,不能包含其他组件,如Valve、logger。
    -------------------------------- server.xml组件详解
    engine     :核心容器组件,catalina引擎,负责通过connector接收用户请求,并处理请求,将请求转至对应的虚拟主机host。
    host         :类似于httpd中的虚拟主机,一般而言支持基于FQDN的虚拟主机。
    context    :定义一个应用程序,是一个最内层的容器类组件(不能再嵌套)。配置context的主要目的指定对应对的webapp的根目录,类似于httpd的alias,其还能为webapp指定额外的属性,如部署方式等。
    connector:接收用户请求,类似于httpd的listen配置监听端口的。
    service(服务):将connector关联至engine,因此一个service内部可以有多个connector,但只能有一个引擎engine。service内部有两个connector,一个engine。因此,一般情况下一个server内部只有一个service,一个service内部只有一个engine,但一个service内部可以有多个connector。
    server     :表示一个运行于JVM中的tomcat实例。
    Valve      :阀门,拦截请求并在将其转至对应的webapp前进行某种处理操作,可以用于任何容器中,比如记录日志(access log valve)、基于IP做访问控制(remote address filter valve)。
    logger     :日志记录器,用于记录组件内部的状态信息,可以用于除context外的任何容器中。
    realm      :可以用于任意容器类的组件中,关联一个用户认证库,实现认证和授权。可以关联的认证库有两种:UserDatabaseRealm、MemoryRealm和JDBCRealm。
    UserDatabaseRealm:使用JNDI自定义的用户认证库。
    MemoryRealm:认证信息定义在tomcat-users.xml中。
    JDBCRealm    :认证信息定义在数据库中,并通过JDBC连接至数据库中查找认证用户。
    ---------------------------------------------------------------------
    作者:rightlzc  来源:CSDN
    原文:https://blog.csdn.net/rightlzc/article/details/82720553

    #-------------------------- 启用 tomcat 的 APR 模式 -------------------------------------
    # Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术。
    # APR(Apache Portable Runtime)
    # 是一个高可移植库,它是Apache HTTP Server2.x的核心。
    # APR有很多用途,包括访问高级IO功能(例如sendfile,epoll和OpenSSL),
    # OS级别功能(随机数生成,系统状态等等),本地进程管理(共享内存,NT管道和UNIXsockets)
    # 这些功能可以使Tomcat作为一个通常的前台WEB服务器,能更好地和其它本地web技术集成,
    # 总体上让Java更有效率作为一个高性能web服务器平台而不是简单作为后台容器。
    #---------------------------------------------------------------------------

    # 先下载以下的三个组件: http://apr.apache.org/download.cgi 
    # 依次安装:
    cd /opt/tomcat8053/apr-1.6.3
    ./configure --prefix=/usr/local/apr  
    make && make install 
    
    cd /opt/tomcat8053/apr-iconv-1.2.2  
    ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
    make && make install 
    
    cd /opt/tomcat8053/apr-util-1.6.1
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv 
    make && make install 
    
    cd /opt/tomcat8053/bin/
    tar zxvf tomcat-native.tar.gz
    cd tomcat-native-1.2.17-src/native
    ./configure --with-apr=/usr/local/apr --with-java-home=/opt/java
        # 如果出现openssl版本错误,则需要更新 wget https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
        tar zxf openssl-1.0.2-latest.tar.gz 
        cd openssl-1.0.2p
        ./config --prefix=/usr/local/openssl -fPIC   # 必须带这些参数
        make
        make install
        mv /usr/bin/openssl ~
        ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
        openssl version         # 查看版本是否更新
        
    # cd tomcat8053/bin/tomcat-native-1.2.17-src/native/ 重新执行下面的 
    ./configure --with-apr=/opt/apr --with-java-home=/usr/local/src/jdk1.8.0_161 --with-ssl=/usr/local/openssl
    make && make install 
    
    # 将APR 添加到环境配置 设置程序共享库位置也就是 使用 export LD_LIBRARY_PATH 
    vim /etc/profile  # 或者 ~/.bash_profile 
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
    
    # 重新加载 生效
    source /etc/profile
    
    # 修改 server.xml  大约70行 的 protocol="HTTP/1.1"
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
                   connectionTimeout="20000"
                   redirectPort="8443" />
                   
    # 大约28行 改为 off <Listener ... SSLEngine="on" />
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
      
    # 重新启动 tomcat

    更详细的优化方案是:

    #------------------------ tomcat 优化 修改2个文件: -----------------------------------
    java -Xmx4096m -version   # 测试一下能否顺利执行 
    
    # catalina.sh 在顶部加入以下: 8G 或 16G 的方案设置一个即可。参数实在太多,解释可以网上搜到。
    JAVA_HOME=/usr/local/src/jdk1.8.0_161
    CATALINA_HOME=/opt/tomcat8053
    CATALINA_OPTS="-server -Xms528m -Xmx528m -XX:PermSize=256m -XX:MaxPermSize=358m"
    CATALINA_PID=$CATALINA_HOME/catalina.pid
    
    # 8G mem
    JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms6144m -Xmx6144m -XX:NewSize=1024m -XX:MaxNewSize=2048m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
    
    # 16G mem
    JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms13312m -Xmx13312m -XX:NewSize=3072m -XX:MaxNewSize=4096m -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"
    
    
    # server.xml  修改大约57行和70行:启用线程池和使用APR
        <Executor 
            name="tomcatThreadPool" 
            namePrefix="catalina-exec-"
            maxThreads="500" 
            minSpareThreads="100" 
            prestartminSpareThreads = "true"
            maxQueueSize = "100"
        />
        
        ... 
        
        <Connector 
           executor="tomcatThreadPool"
           port="8080" 
           protocol="org.apache.coyote.http11.Http11AprProtocol" 
           connectionTimeout="20000" 
           maxConnections="10000" 
           redirectPort="8443" 
           enableLookups="false" 
           acceptCount="100" 
           maxPostSize="10485760" 
           compression="on" 
           disableUploadTimeout="true" 
           compressionMinSize="2048" 
           acceptorThreadCount="2" 
           compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" 
           URIEncoding="utf-8"
        />

    修改内存配置

    这篇博客 http://my.oschina.net/xianggao/blog/83823 比较详细的介绍了Tomcat的一下内存。 
    JVM内存分配设置的参数有四个

    -Xmx    Java Heap最大值,默认值为物理内存的1/4;
    -Xms    Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;
    -Xmn    Java Heap Young区大小,不熟悉最好保留默认值;
    -Xss      每个线程的Stack大小,不熟悉最好保留默认值;

    -XX:PermSize:设定内存的永久保存区域; 
    -XX:MaxPermSize:设定最大内存的永久保存区域;
    -XX:PermSize:设定内存的永久保存区域;
    -XX:NewSize:设置JVM堆的‘新生代’的默认大小;
    -XX:MaxNewSize:设置JVM堆的‘新生代’的最大大小;

    其实我们配置的基本上自由前面两个!贴出我的配置 
    要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。

    今天改了我的 catalina.sh的设置,运行了一会暂时没有发现问题。 这台机器是16G内存,但是还运行了rabbitMQ 所以不能占太多内存。

    CATALINA_OPTS="-server 
                -Xms6000M 
                -Xmx6000M 
                -Xss512k 
                -XX:NewSize=1024M 
                -XX:MaxNewSize=2048M 
                -XX:PermSize=512M
                -XX:MaxPermSize=512M  
                -XX:+AggressiveOpts 
                -XX:+UseBiasedLocking 
                -XX:MaxTenuringThreshold=10 
                -XX:NewRatio=2
                -Xdebug 
                -Xnoagent 
                -Djava.compiler=NONE 
                -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8899"
                

    tomcat这种东西真是不好用,设置参数都搞这么复杂。或许下面这个值得参考:

    https://blog.csdn.net/qq_18279477/article/details/79171894 

     下面是 tomcat8的虚拟主机,一般常用的就是基于不同域名的或不同端口的虚拟主机。据说tomcat不支持基于IP的虚拟主机,原因是浪费IP资源。

    #------------------------------ 不同域名的虚拟主机----------------------------
    # server.xml中 复制<Host>...</Host>这一段,增加一段。
    # 然后修改<Host name="你的域名" appBase="对应站点的目录"  其它可以不变
    # 再增加一行:<Context path="" docBase="" debug="0" reloadable="false" crossContext="true"/>
    # <Value ... />可以不用修改
    # 最后重启 tomcat 即可。

    <Host name="node-666" appBase="/opt/tomcat8053/webapp2" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="" debug="0" reloadable="false" crossContext="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host>
    #------------------------------ 不同端口的虚拟主机----------------------------
    # server.xml中 复制<Service>...</Service>这一段,增加一段。
    # <Service name="不同的名称"
    #   <Connector port="不同的端口" 
    #   <Engine name="不同的名称"
    #       <Host name="localhost"  appBase="不同的目录"
    # 以上4个参数修改一下即可,其它不用修改。 在 <Host ... > 下面再增加一行:
    # <Context path="" docBase="" debug="0" reloadable="false" crossContext="true"/>
    # 最后重启 tomcat 即可。

    <Service name="Catalina2"> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="100" prestartminSpareThreads = "true" maxQueueSize = "100" /> <Connector executor="tomcatThreadPool" port="8001" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="20000" maxConnections="10000" redirectPort="8443" enableLookups="false" acceptCount="100" maxPostSize="10485760" compression="on" disableUploadTimeout="true" compressionMinSize="2048" acceptorThreadCount="2" compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript" URIEncoding="utf-8" /> <Engine name="Catalina2" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="/opt/tomcat8053/webapp2" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="" debug="0" reloadable="false" crossContext="true"/> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> </Host> </Engine> </Service>

    发现tomcat隔三差五天就死掉,只好 kill -9 PID, 然后 tomcat/bin/startup.sh

    查看日志  tomcat/logs/catalina.2019-04-09.log   发现很多 Error 

    09-Apr-2019 00:02:05.298 SEVERE [http-apr-8080-Acceptor-1] org.apache.tomcat.util.net.AprEndpoint$Acceptor.run Socket accept failed
    org.apache.tomcat.jni.Error: 24: Too many open files

    然后开始找哪个 打开文件多:

    netstat -nltp |grep java  # 查进程 PID
    
    lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more   # 找到最多句柄数和PID
    
    lsof -p 2310 | wc -l   # 查看打开数。 2310是tomcat的PID
    
    lsof |grep 2310  >> 2310.log  # 内容太多,输出到文件

    打开输出的文件,发现打开某个文件太多,很多行都是在请求同一个文件。于是让开发查找了程序bug, 可能因为打开文件后没有释放句柄。

    更新代码后 tomcat 恢复正常

    其实centos 的 ulimit -a 的 open files  我已经改到65535了。   vim /etc/security/limits.conf 

    root soft nofile 65535
    root hard nofile 65535
    * soft nofile 65535
    * hard nofile 65535

    检查一下 tomcat 进程的 limits 

    cat /proc/2310/limits
  • 相关阅读:
    次小生成树(SST)
    传纸条(scrip)
    动态规划练习5
    动态规划练习4
    整数的lqp拆分
    [HNOI2002]跳蚤
    BZOJ1803: Spoj1487 Query on a tree III
    51nod-1526: 分配笔名
    51nod-1615: 跳跃的杰克
    BZOJ2588: Spoj 10628. Count on a tree
  • 原文地址:https://www.cnblogs.com/frx9527/p/tomcat8.html
Copyright © 2020-2023  润新知