• linux安装tomcat及优化


    Tomcat支持三种接收请求的处理方式:BIO、NIO、APR
    1>、BIO模式:阻塞式I/O操作,表示Tomcat使用的是传统Java I/O操作(即Java.io包及其子包)。Tomcat7以下版本默认情况下是以bio模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低。启动tomcat看到如下日志,表示使用的是BIO模式:
    BIO模式
    2>、NIO模式:是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行比较简单,只需要在Tomcat安装目录/conf/server.xml文件中将如下配置:

    <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

    修改成:

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
    connectionTimeout="20000"
    redirectPort="8443" />

    注意:Tomcat8以上版本,默认使用的就是NIO模式,不需要额外修改
    NIO模式
    3>、apr模式:简单理解,就是从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能, 也是Tomcat运行高并发应用的首选模式。
    启用这种模式稍微麻烦一些,需要安装一些依赖库,下面以在CentOS6.5版环境下Tomcat-7.0.11为例,介绍安装步聚:

    前提需要配置JDK   JAVA_HOME

    阿里云  格式化和挂载数据盘  https://help.aliyun.com/document_detail/25426.html?spm=5176.doc25446.2.4.Hlmy9O

    tar -zxvf apache-tomcat-7.0.11.tar.gz

    环境   CentOS 6.5 64位   yum install -y gcc gcc-c++ 如安装则不用执行

    安装apr    官网http://apr.apache.org/download.cgi

    1、安装版本

    Linux系统:选用Redhat的开源版本CentOS操作系统(这里用CentOS 6.5版本)
    JDK:选用版本为jdk1.7.0_45,安装包jdk-7u67-linux-x64.tar.gz
    Apache:选用版本2.4.7,安装包httpd-2.4.7.tar.gz
    Tomcat:选用版本7.0.47,安装包apache-tomcat-7.0.11.tar.gz
    JK:选用版本1.2.37,安装包:tomcat-connectors-1.2.37-src.tar.gz

    2、Apache安装:
     (1)、安装apr
      在/usr/local目录下安装apr:
      #tar -zxvf apr-1.5.0.tar.gz  -C /mnt/soft
      #cd apr-1.5.0
      #./configure --prefix=/mnt/soft/apr
      # make
      # make install
     (2)、安装apr-util
      在/usr/local目录下安装apr-util:
      #tar -zxvf apr-util-1.5.3.tar.gz  -C /mnt/soft
      #cd apr-util-1.5.3
      #./configure --prefix=/mnt/soft/apr-util --with-apr=/mnt/soft/apr
      # make
      # make install
     (3)、安装pcre
      在/usr/local目录下安装pcre:
      # tar -zxvf pcre-8.32.tar.gz  -C /mnt/soft
      # cd pcre-8.32
      #./configure --prefix=/mnt/soft/pcre
      # make
      # make install

      (4)、 安装APR tomcat-native

      //tomcat-native-1.1.27-src.tar.gz  这个我装的tomcat里边就自己带了,在bin目录下,如果你们没有找到,去网上下一个就行了

      #cd apache-tomcat-6.0.20/bin

      #tar zxvf tomcat-native.tar.gz

      #cd tomcat-native/jni/native

      #./configure --with-apr=/mnt/soft/apr

      #make

      #make install

      设置 Tomcat 整合 APR 修改 tomcat 的启动 shell (catalina.sh),在该文件中加入启动参数: CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib"


     (5)、安装httpd
      #tar -zxvf httpd-2.4.7.tar.gz   -C /mnt/soft
      定位到文件夹/usr/local /httpd-2.4.7。
      #cd httpd-2.4.7
      设置安装路径和需要编译的模块。
      # ./configure --prefix=/usr/local/apache --enable-so -enable-proxy -enable-proxy_http=shared--enable-module=so --enable-mods-shared=all --enable-proxy-ajp=shared  --enable-proxy-balancer--with-mpm=worker --with-apr=/usr/local/apr/   --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre
      //备注:prefix定义apache的安装路径
      编译通过,继续安装apache。
      # make

      # make install

    3、Apache配置及测试
       安装完毕后,在测试启动apache之前先修改/apache/conf /httpd.conf。
      (1)查找ServerName,打开注释,将ServerName值改为对应的IP地址。
     
      (3)以下2个注释去掉:
           #Include conf/extra/httpd-mpm.conf
           #Include conf/extra/httpd-default.conf

      (4):保存httpd.conf文件的修改,启动apache服务。
       # /usr/local/apache/bin/apachectl start
       浏览器访问http://127.0.0.1,提示无法连接。说明apache没有成功启动。查看错误日志(/apache/logs/error_log),发现如图错误信息。原因是httpd.conf里面的mod_slotmem_shm.so没有加载。将httpd.conf 文件中的“#LoadModule    slotmem_shm_module modules/mod_slotmem_shm.so”前的“#”去掉即可。

      (5)重新启动apache并查看httpd是否运行。
         # /mnt/soft/apache/bin/apachectl start
         # ps -ef | grep httpd
      (6)浏览器测试apache。在浏览器中访问http://127.0.0.1 。页面出现“It's Works!”字样即为成功。
       Apache的启动和关闭:
       在/usr/local/apache/bin下有可执行程序。
      (1)启动apache服务:# /usr/local/apache/bin/apachectl start
      (2)关闭apache服务:#  /usr/local/apache/bin/apachectlstop
      (3)重启apache服务:#  /usr/local/apache/bin/apachectl restart

    一、设置Tomcat    server.xml

    替换以下内容:

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="100" maxIdleTime="60000" />

    <Connector port="8080"
            protocol="org.apache.coyote.http11.Http11AprProtocol"
            executor="tomcatThreadPool"
            compression="on"
            compressionMinSize="2048"
            maxThreads="30000"
            minSpareThreads="512"
            maxSpareThreads="2048"
            enableLookups="false"
            redirectPort="8443"
            acceptCount="35000"
            debug="0"
            connectionTimeout="40000"
            disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />

           <Connector port="8009" protocol="AJP/1.3" maxThreads="500" minSpareThreads="100"  acceptCount="1000"
            connectionTimeout="20000" redirectPort="8443" />

         

           <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

           <value>下

           <Context reloadable="false" path="" >   
                     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
                        memcachedNodes="n1:121.42.39.69:11211,n2:118.190.116.115:11211"
                        sticky="false"  
                        sessionBackupAsync="false"  
                        lockingMode="auto"  
                        requestUriIgnorePattern=".*.(ico|png|gif|jpg|css|js)$"  
                        transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"  
                        />  
                </Context> 

             //集群  放到 <Engine> 里</Engine>
          <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
           <Manager className="org.apache.catalina.ha.session.BackupManager"
              expireSessionsOnShutdown="false"
              notifyListenersOnReplication="true"
              mapSendOptions="6"/>
       
        <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                address="224.0.0.1"
                port="45564"
                frequency="500"
                dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                address="121.42.39.69"
                port="4000"
                autoBind="100"
                selectorTimeout="5000"
                maxThreads="500"/>
            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
        </Channel>
        <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
        <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
        <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
             tempDir="/tmp/war-temp/"
             deployDir="/tmp/war-deploy/"
             watchDir="/tmp/war-listen/"
             watchEnabled="false"/>
        <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

         

     二、Linux下修改JVM内存大小及优化

    要添加在tomcat 的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,添加

    #JAVA_OPTS="-Xms1024m -Xmx1024m -Xss1024K -XX:PermSize=768m -XX:MaxPermSize=1024m"
    JAVA_OPTS="
    -Xms1024M
    -Xmx1024M
    -Xss512k
    -XX:+AggressiveOpts
    -XX:+UseBiasedLocking
    -XX:PermSize=256M
    -XX:MaxPermSize=512M
    -XX:+DisableExplicitGC
    -XX:MaxTenuringThreshold=31
    -XX:+UseConcMarkSweepGC
    -XX:+UseParNewGC  
    -XX:+CMSParallelRemarkEnabled
    -XX:+UseCMSCompactAtFullCollection
    -XX:LargePageSizeInBytes=128m  
    -XX:+UseFastAccessorMethods
    -XX:+UseCMSInitiatingOccupancyOnly
    -Djava.awt.headless=true"

    三、查看当前系统open files的默认值:

    ulimit -a

    没改过是1024

    搜了一下,据说tomcat有默认的日志分割功能,能每天自动生成类似catalina.2010-10-08.log的文件,但是默认catalina.out文件却一直增长.据说到一定大小时占磁盘空间(废话),影响性能,且会报错,这点暂时没发现.其他的查了一下logs文件确实如此. 
    解决方法,使用cronolog进行日志切割,据说cronolog是个切割日志的小工具,可以切割很多种日志文件,有空得试试.具体做法如下: 
    1、下载(最新版本) 
    # wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 
    2、解压缩 
    # tar zxvf cronolog-1.6.2.tar.gz 
    3、进入cronolog安装文件所在目录 
    # cd cronolog-1.6.2 
    4、运行安装 (如没有安装gcc,则先安装gcc)

    安装gcc    
    yum install gcc

    --------------------------------
    # ./configure 
    # make 
    # make install 
    5、查看cronolog安装后所在目录(验证安装是否成功) 
    # which cronolog 
    一般情况下显示为:/usr/local/sbin/cronolog 

    6.进入Tomcat的bin目录,打开catalina.sh文件,找到tomcat启动的相关行,或者你直接查找catalina.out,一般我们修改下面行中的内容, 

    在else-412行左右里修改 
    org.apache.catalina.startup.Bootstrap “$@” start   
    >> “$CATALINA_BASE”/logs/catalina.out 2>&1 & 
    为 
    org.apache.catalina.startup.Bootstrap "$@" start 2>&1
          | /usr/local/sbin/cronolog  "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &

    注释掉         #touch "$CATALINA_OUT"


    完成之后重起Tomcat就可以了,在logs目录下可以看到catalina.年-月-日.out的日志,是按日生成的。

    -------------------------------------------------------------apache + tomcat 集群

    Linux系统:阿里云CentOS 6.5版本
    JDK:选用版本为jdk1.7.0_45,安装包jdk-7u67-linux-x64.tar.gz
    Apache:选用版本2.4.7,安装包httpd-2.4.7.tar.gz
    Tomcat:选用版本7.0.47,安装包apache-tomcat-7.0.11.tar.gz
    JK:选用版本1.2.37,安装包:tomcat-connectors-1.2.37-src.tar.gz

    1.yum install -y gcc gcc-c++ 如安装则不用执行
    2.安装apr             --如上

    3.安装 安装apr-util           --如上

    4.安装pcre
      # tar -zxvf pcre-8.32.tar.gz
      # cd pcre-8.32
      #./configure --prefix=/usr/local/pcre
      # make
      # make install

    5.安装 apache
      #tar -zxvf httpd-2.4.7.tar.gz
      #cd httpd-2.4.7
      设置安装路径和需要编译的模块。
      #./configure --prefix=/usr/local/apache --enable-so -enable-proxy -enable-proxy_http=shared--enable-module=so --enable-mods-shared=all --enable-proxy-ajp=shared  --enable-proxy-balancer--with-mpm=worker --with-apr=/usr/local/apr/   --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre
      #make

      #make install

    6.Apache配置及测试
       安装完毕后,在测试启动apache之前先修改/apache/conf /httpd.conf。
       (1)查找ServerName,打开注释,将ServerName值改为对应的IP地址。
       (2)在DirectoryIndex中添加 index.jsp。

       <IfModule dir_module>
             DirectoryIndex index.html index.jsp
       </IfModule>
       (3)以下2个注释去掉:
       #Include conf/extra/httpd-mpm.conf
       #Include conf/extra/httpd-default.conf

      保存httpd.conf文件的修改,启动apache服务。
      # /usr/local/apache/bin/apachectl start
      浏览器访问http://127.0.0.1,提示无法连接。说明apache没有成功启动。查看错误日志(/apache/logs/error_log),发现如图错误信息。原因是httpd.conf里面的mod_slotmem_shm.so没有加载。将httpd.conf 文件中的“#LoadModule slotmem_shm_module              modules/mod_slotmem_shm.so”前的“#”去掉即可。

    (4)重新启动apache并查看httpd是否运行。
         # /mnt/soft/apache/bin/apachectl start
         # ps -ef | grep httpd
    (5)浏览器测试apache。在浏览器中访问http://127.0.0.1 。页面出现“It's Works!”字样即为成功。
         Apache的启动和关闭:
         在/usr/local/apache/bin下有可执行程序。
         启动apache服务:# /usr/local/apache/bin/apachectl start
         关闭apache服务:#  /usr/local/apache/bin/apachectl stop
         重启apache服务:#  /usr/local/apache/bin/apachectl restart

    7.mod_jk安装:
         mod_jk的作用:连接apache和tomcat集群的中间件。
         mod_jk的安装包:tomcat-connectors-1.2.37-src.tar.gz。
    安装步骤如下:
        (1)将安装包从/software目录拷贝到/usr/local目录下(图形界面下直接“复制”-“粘贴”即可)。
         #cp /software/tomcat-connectors-1.2.37-src.tar.gz /usr/local
        (2)定位到文件夹/usr/local/。
         #cd /usr/local
        (3)解压安装包到当前目录。
         # tar -zxvf tomcat-connectors-1.2.37-src.tar.gz
        (4)编译安装mod_jk。
         #cd tomcat-connectors-1.2.37-src/native
         # chmod 755 buildconf.sh
         # ./buildconf.sh

        如果提示:

        buildconf: checking installation...

        buildconf: autoconf not found.

               You need autoconf version 2.59 or newer installed

               to build mod_jk from SVN.

    解决:

        [root@sony619 native]# yum install autoconf

        执行[root@sony619 native]#./buildconf.sh 再次提示:

        buildconf: libtool not found.

               You need libtool version 1.4 or newer installed

               to build mod_jk from SVN.

    解决:

        [root@sony619 native]#yum install libtool
         # ./configure --with-apxs=/usr/local/apache/bin/apxs
         # make
         # make install
        (5)将/tomcat-connectors-1.2.37/native/apache-2.0下的mod_jk.so文件拷贝到apache安装目录下的modules文件夹下面。
         # cp ./apache-2.0/mod_jk.so /usr/local/apache/modules/

    配置/apache/conf /httpd.conf

    #加载mod_jk Module
    LoadModule jk_module modules/mod_jk.so
    # Load Configure while Loading JK Connector Module  
    <IfModule jk_module>  
      JkWorkersFile conf/workers.properties  
      JkMountFile conf/uriworkermap.properties  
      JkLogFile logs/mod_jk.log  
      JkLogLevel warn  
    </IfModule>  
    # Apache Server is working in worker mode  
    <IfModule worker.c>  
     StartServers            5  
     ServerLimit            20  
     ThreadLimit           200  
     MaxClients           4000  
     MinSpareThreads        25  
     MaxSpareThreads       250  
     ThreadsPerChild       200  
     MaxRequestsPerChild  500  
    </IfModule>

    修改ServerName 12.34.56.78:80    你的IP

    日志分割

    修改 ErrorLog    305行左右

    ErrorLog "| /mnt/soft/apache/bin/rotatelogs logs/%Y_%m_%d_error_log 86400 480"
     
    修改CustomLog   336行左右

    CustomLog  "| /mnt/soft/apache/bin/rotatelogs  logs/%Y_%m_%d.access.log 86400 480" common

    8.利用memcached 实现session共享

    查看系统是否带有该安装软件,如果有执行命令:
    #rpm -e libevent-1.4.13-4.el6.x86_64 --nodeps(由于系统自带的版本旧,忽略依赖删除)

    #tar zxvf memcached-1.4.15.tar.gz  -C /mnt/soft
    # cd memcached-1.4.15
    # ./configure --prefix=/mnt/soft/memcached --with-libevent=/mnt/soft/libevent/
    #make
    #make install
    至此memcached安装完毕;

    当启动memcached时经常不能发现libevent.so;可以通过以下命令检查:
       进入/usr/local/memcached/bin目录
       LD_DEBUG=help
    ./memcached -v
       LD_DEBUG=libs  ./ memcached
    -v
       解决方法:(执行)
       ln -s /mnt/soft/libevent/lib/libevent-2.0.so.5 /lib64/libevent-2.0.so.5

    启动memcached
    1.打开一个终端,输入以下命令:启动
    /mnt/soft/memcached/bin/memcached -d -m 256 -u root -p 11211 -c 1024 –P /tmp/memcached.pid

    2.停止Memcache进程:
      # kill `cat /tmp/memcached.pid`
      # ps -ef | grep memcached
    root 28914 1 0 07:27 ? 00:00:00 memcached -d -m 128 -l localhost -p 11211 -u root (启动ok)

    二.调用的包
    可从http://code.google.com/p/memcached-session-manager/downloads/list下载所需要的包.
    需要注意的是,你只能从该网站下载到 memcached-session-manager-1.5.1.jar  /  memcached-session-manager-tc6-1.5.1.jar  /  msm-javolution-serializer-1.5.1.jar
    这3个包,还有2个包分别是 : memcached-2.5.jar  /  javolution-5.5.1.jar这2个包,需要自己另外下载哦.
    都是放到tomcat/lib下.

    9 配置linux文件自动挂载

    CentOS6.6服务器之间文件共享挂载

     

    目的:因为服务器设置了负载均衡,多服务器的文件上传必然要同步,这里的目的把服务器1设置为主文件服务器

    服务器1:192.168.1.100

    服务器2:192.168.1.20

     

    安装基础所需套件[每台]

    1.nfs

    [html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    yum install nfs-utils  

     

    2.设置服务自启动

    [plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    chkconfig rpcbind on 

    chkconfig nfs on  

    3.启动服务

    [plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    service rpcbind start 

    service nfs start  

    Centos 服务器1 设置

    [plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    /mnt/soft/apache-tomcat-7.0.11/webapps  192.168.1.20(rw,no_root_squash,no_all_squash,sync)
    然后重新加载

    [plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    exportfs  -r   共享列表查看

    [plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    exportfs  

    Centos 服务器2 设置

    1.查看 服务器1 是否已共享

    [plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    showmount -e 192.168.1.100   如果有共享,则会显示共享列表

    3.挂载

    [plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    mount -t nfs -o rw 192.168.1.100:/mnt/soft/apache-tomcat-7.0.11/webapps /mnt/soft/apache-tomcat-7.0.11/webapps

    4.查看是否已挂载

     
    df -h    

    5.卸载,删除共享

    [plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    umount /www/wwwroot/www.lanmps.com/uploads  

    6.设置开机挂载,自动加载

    方法一(推荐)
    编辑  /etc/rc.local 文件 ,加入
    [html] view plaincopyprint?在CODE上查看代码片派生到我的代码片
     

    mount -t nfs -o rw 192.168.1.100:/www/wwwroot/www.lanmps.com/uploads /www/wwwroot/www.lanmps.com/uploads  

  • 相关阅读:
    Tornado之异步authenticated
    使用Tornado和协程爬取博客园文章
    Python协程与asyncio
    Mr.Jin系统发布报告——WIN7 WIN8双系统下的学习模式系统
    Matlab:fsolve No solution found.
    Matlab R2016b下载 安装及破解教程
    第一行代码近期bug及解决
    Android Studio打包生成APK教程
    Notification通知在OPPO手机上不弹出提示?
    Android Studio如何在命令提示符中使用ADB指令
  • 原文地址:https://www.cnblogs.com/jentary/p/6689591.html
Copyright © 2020-2023  润新知