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  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM