十四周二次課(6月27日)

16.4 配置Tomcat監聽80端口

首先確定80端口沒有被別的服務給佔用:如nginx、apache,如果被佔用了,需要想辦法把80端口給留出來
tomcat默認監聽的是8080端口
tomcat是支持自定義端口的,比如把8080改爲80端口
編輯配置文件vim /usr/local/tomcat/conf/server.xml, 搜索8080


[root@aiker src]# vim /usr/local/tomcat/conf/server.xml    
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation with the JSSE engine. When
                                                                           67,58         39%

Connector port="8080" protocol="HTTP/1.1"修改爲Connector port="80" protocol="HTTP/1.1"


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

改完之後重啓服務,先shutdown 再startup

[root@aiker src]# /usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

查看監聽端口:

[root@aiker src]# netstat -antp | grep java                                                
tcp6       0      0 :::80                   :::*                    LISTEN      5170/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      5170/java           
tcp6       0      0 :::8009                 :::*                    LISTEN      5170/java  

16.5/16.6/16.7 配置Tomcat虛擬主機

Apache和nginx都支持虛擬主機配置文件,虛擬主機配置文件一臺服務器上或者一個webserver上,支持一個IP下可以訪問多個域名,一個域名就代表一個網站,通過配置虛擬主機可以配置多個網站,每個網站都稱之爲一個虛擬主機,tomcat同樣也支持這個概念

開啓虛擬機

編輯配置文件

vim /usr/local/tomcat/conf/server.xml

搜索 Host

tomcat的配置文件格式爲 xml,語法是“<>開頭,</>結尾” 虛擬主機配置文件內容 其中<Host>和</Host>之間的配置爲虛擬主機配置部分,name定義域名, appBase定義應用的目錄,Java的應用通常是一個jar的壓縮包,你只需要將jar的壓縮包放到appBase目錄下面即可。剛剛阿銘訪問的Tomcat默認頁其實就是在appBase目錄下面,不過是在它子目錄ROOT裏。

下面進入這個配置文件server.xml,搜索host

    <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
                 Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
                 Documentation at: /docs/config/valve.html             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                     prefix="localhost_access_log" suffix=".txt"
                     pattern="%h %l %u %t "%r" %s %b" />

    </Host>
</Engine>
</Service></Server>

添加如下內容

<Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
                 Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
                 Documentation at: /docs/config/valve.html             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                     prefix="localhost_access_log" suffix=".txt"
                     pattern="%h %l %u %t "%r" %s %b" />

    </Host>
 <Host name="www.123.cn" appBase=""
         unpackWARs= "true" autoDeploy="true"
         xmlValidation="false" xmlNamespaceAware="false">
         <Context path="" docBase="/data/wwwroot/123.cn/" debug="0" reloadable="true" crossContext="true"/></Host>

</Engine>
[root@aiker ~]# vim /usr/local/tomcat/conf/server.xml
[root@aiker ~]#

docBase,這個參數用來定義網站的文件存放路徑,如果不定義,默認是在appBase/ROOT下面,定義了docBase就以該目錄爲主了,其中appBase和docBase可以一樣。在這一步操作過程中很多遇到過訪問404的問題,其實就是docBase沒有定義對。

appBase爲應用存放目錄,通常是需要把war包直接放到該目錄下面,它會自動解壓成一個程序目錄

下面我們通過部署一個java的應用來體會appBase和docBase目錄的作用

下載zrlog

wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war
[root@aiker src]# wget 
--2018-02-11 21:21:07--  
 正在解析主機 dl.zrlog.com (dl.zrlog.com)... 183.158.35.59
 正在連接 dl.zrlog.com (dl.zrlog.com)|183.158.35.59|:80... 已連接。
 已發出 HTTP 請求,正在等待迴應... 200 OK長度:7122027 (6.8M) [application/zip]
 正在保存至: “zrlog-1.7.1-baaecb9-release.war”100%[===================================================>] 7,122,027   
 2.21MB/s 用時 3.1s   2018-02-11 21:21:11 (2.21 MB/s) - 
 已保存 “zrlog-1.7.1-baaecb9-release.war” [7122027/7122027])
 [root@aiker ~]# du -sh zrlog-1.7.1-baaecb9-release.war 
 6.8M zrlog-1.7.1-baaecb9-release.war

appBase爲應用存放目錄(實際上是一個相對路徑,相對於 /usr/local/tomcat/ 路徑),通常是需要把war包直接放到該目錄下面,它會自動解壓成一個程序目錄 爲了方便測試,下載一個zrlog(java寫的blog站點應用,輕量),進行測試

appbase自動解壓war包

[root@aiker ~]# ls /usr/local/tomcat/webapps/
docs  examples  host-manager  manager  ROOT
[root@aiker ~]# 
root@aiker ~]# 
[root@aiker ~]# 
[root@aiker ~]# 
[root@aiker ~]# cp zrlog-1.7.1-baaecb9-release.war /usr/local/tomcat/webapps/
[root@aiker ~]# !lsls /usr/local/tomcat/webapps/
docs      host-manager  ROOT                         zrlog-1.7.1-baaecb9-release.war
examples  manager       zrlog-1.7.1-baaecb9-release
[root@aiker ~]#

把root下的 zrlog文件移到src目錄下

[root@aiker ~]# ls
1.txt  anaconda-ks.cfg  zrlog-1.7.1-baaecb9-release.war
[root@aiker ~]# mv zrlog-1.7.1-baaecb9-release.war /usr/local/src
[root@aiker ~]# ls
1.txt  anaconda-ks.cfg
[root@aiker ~]# cd /usr/local/src
[root@aiker src]# rm -f  /usr/local/tomcat/webapps/zrlog-1.7.1-baaecb9-release.war 
[root@aiker src]# ls
apache-tomcat-8.5.8.tar.gz                 nginx-1.12.1apr-1.6.2                                  nginx-1.12.1.tar.gz
apr-1.6.2.tar.gz                           php-5.6.30apr-util-1.6.0                             php-5.6.30.tar.gz
apr-util-1.6.0.tar.gz                      php-7.1.6httpd-2.4.27                               php-7.1.6.tar.bz2
httpd-2.4.27.tar.gz                        phpredis-develop
jdk-8u101-linux-x64.tar.gz                 phpredis-develop.zip
logs                                       zrlog-1.7.1-baaecb9-release.war
mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
[root@aiker src]#

剛剛把webapps目錄下的 zrlog 刪掉了,解壓的目錄頁跟着沒了,其實我們只是想刪包,留着目錄

[root@aiker src]# cd /usr/local/tomcat/webapps/
[root@aiker webapps]# lsdocs  examples  host-manager  manager  ROOT
[root@aiker webapps]#

再把它拷貝回來,再改下名字

[root@aiker webapps]# cp /usr/local/src/zrlog-1.7.1-baaecb9-release.war .
[root@aiker webapps]# ls
docs      host-manager  ROOT                         zrlog-1.7.1-baaecb9-release.war
examples  manager       zrlog-1.7.1-baaecb9-release
[root@aiker webapps]# 

[root@aiker webapps]# mv zrlog-1.7.1-baaecb9-release zrlog
[root@aiker webapps]# ls
docs      host-manager  ROOT   zrlog-1.7.1-baaecb9-release
examples  manager       zrlog  zrlog-1.7.1-baaecb9-release.war
[root@aiker webapps]#

發現改完名字了,又自動生成一個 解壓文件了,只要war包存在,過會兒 又會自動生成一個解壓的文件

現在要訪問這個zrlog ,怎麼訪問呢,現在 就可以登錄站點,嘗試訪問了

會出來一個安裝嚮導,實際上就是讓我們去配置數據庫

之前也講過怎麼去創建一個用戶,創建一個庫

先來檢查下mysql服務有沒有啓動

[root@aiker webapps]# ps aux |grep mysql
root       2126  0.0  0.1 115392  1616 ?        S    16:30   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/aiker.pid
mysql      2294  0.0 45.5 1300800 455660 ?      Sl   16:30   0:10 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/aiker.err --pid-file=/data/mysql/aiker.pid --socket=/tmp/mysql.sock
root       4140  0.0  0.0 112684   980 pts/1    R+   22:03   0:00 grep --color=auto mysql
[root@aiker webapps]#

有啓動的話就進mysql

[root@aiker webapps]# mysql -uroot -paiker123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1Server version: 5.6.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trade of Oracle Corporation and/or its
affiliates. Other names may be trades of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
創建數據庫

mysql> create database zrlog;Query OK, 1 row affected (0.00 sec)mysql>
再創建一個用戶

mysql> grant all on zrlog.* to 'zrlog'@127.0.0.1 identified by 'aiker123456';
Query OK, 0 rows affected (0.05 sec)mysql> mysql> mysql> quitBye
使用這個新創建的用戶登錄mysql,查看數據庫,只要有zrlog就ok
[root@aiker webapps]# mysql -uzrlog -h127.0.0.1 -paiker123456
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2Server version: 5.6.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trade of Oracle Corporation and/or itsaffiliates. Other names may be trades of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> show databases;
+--------------------+| Database           |
+--------------------+| information_schema |
| test               |
| zrlog              |
+--------------------+3 rows in set (0.03 sec)

mysql>

瀏覽器打開網址,填寫之前配置的信息
十四周二次課(6月27日)
十四周二次課(6月27日)
十四周二次課(6月27日)
十四周二次課(6月27日)
打開配置文件

[root@aiker webapps]# vim /usr/local/tomcat/conf/server.xml      
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />

      </Host>
     <Host name="www.123.cn" appBase=""
    unpackWARs= "true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="/data/wwwroot/123.cn/" debug="0" reloadable="true" crossContext="true"/></Host>

    </Engine>

測試用docBase指定路徑,訪問是否生效,前面做了新增虛擬機配置,自然就需要生成對應的目錄

mkdir /data/wwwroot/123.cn/

將之前的zrlog的文件移動到當前目錄下

[root@aiker webapps]# vim /usr/local/tomcat/conf/server.xml
[root@aiker webapps]# mkdir /data/wwwroot/123.cn
[root@aiker webapps]# mv /usr/local/tomcat/webapps/zrlog/admin/ error/ include/ META-INF/
assets/ favicon.ico install/ WEB-INF/
[root@aiker webapps]# mv /usr/local/tomcat/webapps/zrlog/* /data/wwwroot/123.cn/
[root@aiker webapps]#
[root@aiker webapps]#
[root@aiker webapps]#
用windows測試下

重啓服務,之前修改了配置文件,新增了虛擬主機,但並沒有重啓,所以沒有及時生效

[root@aiker webapps]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@aiker webapps]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@aiker webapps]# 
[root@aiker webapps]# netstat -lntp |grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      4322/java           
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      4322/java           
tcp6       0      0 :::8009                 :::*                    LISTEN      4322/java           
[root@aiker webapps]# 
[root@aiker webapps]# pwd/usr/local/tomcat/webapps
[root@aiker webapps]#

把www.123.cn 綁定windows hosts

再去瀏覽器訪問www.123.cn

16.8 Tomcat日誌

ls /usr/local/tomcat/logs
[root@aiker webapps]# ls /usr/local/tomcat/logs/ 
catalina.2018-02-11.log            host-manager.2018-02-11.log            localhost_access_log.2018-02-11.txt
catalina.out                       manager.2018-02-11.log

其中catalina開頭的日誌爲Tomcat的綜合日誌,它記錄Tomcat服務相關信息,也會記錄錯誤日誌。

其中catalina.2018-xx-xx.log和catalina.out內容相同,前者會每天生成一個新的日誌。

host-manager和manager爲管理相關的日誌,其中host-manager爲虛擬主機的管理日誌。

localhost和localhost_access爲虛擬主機相關日誌,其中帶access字樣的日誌爲訪問日誌,不帶access,字樣的爲默認虛擬主機的錯誤日誌。

訪問日誌默認不會生成,需要在server.xml中配置一下。
具體方法是在對應虛擬主機的<Host></Host>裏面加入下面的配置(假如域名爲www.123.cn):

</Host>
      <Host name="www.123.cn" appBase=""
            unpackWARs= "true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
            <Context path="" docBase="/data/wwwroot/123.cn/" debug="0" reloadable="true" crossContext="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="www.123.cn_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />

prefix定義訪問日誌的前綴,suffix定義日誌的後綴,pattern定義日誌格式。新增加的虛擬主機默認並不會生成類似默認虛擬主機的那個localhost.日期.log日誌,錯誤日誌會統一記錄到catalina.out中。關於Tomcat日誌,你最需要關注catalina.out,當出現問題時,我們應該第一想到去查看它。

[root@aiker webapps]# less /usr/local/tomcat/logs/www.123.cn_access_log.2018-03-17.txt 
172.16.58.8 - - [11/Feb/2018:20:34:51 +0800] "GET /post/first HTTP/1.1" 200 12668
172.16.58.8 - - [11/Feb/2018:20:34:51 +0800] "GET /assets/css/video-js.css HTTP/1.1" 304 -
172.16.58.8 - - [11/Feb/2018:20:34:51 +0800] "GET /include/templates/default/css/style.css HTTP/1.1" 304 -
172.16.58.8 - - [11/Feb/2018:20:34:51 +0800] "GET /include/templates/default/css/editormd.css HTTP/1.1" 304 -
172.16.58.8 - - [11/Feb/2018:20:34:51 +0800] "GET /include/templates/default/js/lib/jquery-1.10.2.min.js HTTP/1.1" 304 -
172.16.58.8 - - [11/Feb/2018:20:34:51 +0800] "GET /include/templates/default/js/lib/modernizr.min.js HTTP/1.1" 304 -

擴展

邱李的tomcat文檔
https://www.linuser.com/forum.php?mod=forumdisplay&fid=37
JAR、WAR包區別

Jar、war、EAR、在文件結構上,三者並沒有什麼不同,它們都採用zip或jar檔案文件壓縮格式。但是它們的使用目的有所區別:

  Jar文件(擴展名爲. Jar,Java Application Archive)包含Java類的普通庫、資源(resources)、輔助文件(auxiliary files)等

  War文件(擴展名爲.War,Web Application Archive)包含全部Web應用程序。在這種情形下,一個Web應用程序被定義爲單獨的一組文件、類和資源,用戶可以對jar文件進行封裝,並把它作爲小型服務程序(servlet)來訪問。

  Ear文件(擴展名爲.Ear,Enterprise Application Archive)包含全部企業應用程序。在這種情形下,一個企業應用程序被定義爲多個jar文件、資源、類和Web應用程序的集合。

  每一種文件(.jar, .war, .ear)只能由應用服務器(application servers)、小型服務程序容器(servlet containers)、EJB容器(EJB containers)等進行處理。

EAR文件包括整個項目,內含多個ejb module(jar文件)和web module(war文件)

EAR文件的生成可以使用winrar zip壓縮方式或者jar命令。

步驟:

先打包成war和jar,並寫好application.xml,放到META-INF目錄下,然後 jar cf your_application.ear your_war.war your_jar.jar META-INF/application.xml, 打包,我這假設都在當前目錄下 可以用 jar xf your_application.ear解壓

application.xml中描述你的ear中包括的war和jar (上篇文章已經提到)

jboss中 的application.xml例子


<span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE application PUBLIC  
    "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"  
    "http://java.sun.com/dtd/application_1_3.dtd">  
<application>  
  <display-name>lishehetestear</display-name>  
  <module>  
    <java>lishehe_api-0.0.1-SNAPSHOT.jar</java>  
  </module>  
  <module>  
    <java>lishehe_core-0.0.1-SNAPSHOT.jar</java>  
  </module>  
  <module>  
    <web>  
      <web-uri>lishehe_war-0.0.1-SNAPSHOT.war</web-uri>  
      <context-root>/lishehe_war</context-root>  
    </web>  
  </module>  
</application></span></span>  

WAR的使用:

如果想生成war文件:可以使用如下命令:jar -cvf web1.war *

如果想查看web1.war中都有哪些文件,可以使用命令:jar -tf web1.war

如果想直接解壓web1.war文件,可以使用命令:jar -xvf web1.war

另外,也可使用winrar軟件選擇zip壓縮方式,並將壓縮文件後綴名改爲war即可壓縮生成war文件;同樣使用winrar軟件可以強行打開war文件,或者強行解壓war文件

使用jar命令與winrar軟件的區別在於前者在壓縮文件的同時會生成MetaINF文件夾,內包含MANIFEST.MF文件。

總結:

何時使用war或者jar文件:當你的項目在沒有完全竣工的時候,不適合使用war文件,因爲你的類會由於調試之類的經常改,這樣來回刪除、創建war文件很不爽,最好是你的項目已經完成了,不改了,那麼就打個war包吧,這個時候一個war文件就相當於一個web應用程序鳥;而jar文件就是把類和一些相關的資源封裝到一個包中,便於程序中引用。

tomcat常見配置彙總
http://blog.sina.com.cn/s/blog_4ab26bdd0100gwpk.html
啓動內存參數的配置
tomcat/bin/catalina.bat 如果是linux 就是 catalina.sh
在rem 的後面增加如下參數

set JAVA_OPTS= -Xms256m -Xmx256m -XX:MaxPermSize=64m

2 修改Tomcat的JDK目錄
打開tomcat/bin/catalina.bat
在最後一個rem後面增加

set JAVA_HOME=C:\Program Files\Java\jdk1.6.0

3 增加虛擬目錄

/tomcat/conf/server.xml

第一行是以前默認存在的,第二行是新增的

<Context path="" docBase="ROOT" debug="0" reloadable="true"></Context>
<Context path="/jsp/a" reloadable="true" docBase="E:\workplace\www.java2000.net\WebContent" />

4 GET方式URL亂碼問題解決
打開 tomcat/conf/server.xml
查找下面這部分,在最後增加一段代碼就可以了。

<Connector port="80" maxHttpHeaderSize="8192"
.................
URIEncoding="UTF-8" useBodyEncodingForURI="true"
...............
/>

其中的UTF-8 請根據你的需要自己修改,比如GBK
5 虛擬主機配置文件

tomcat/conf/server.xml
<!-- 默認的主機 -->
<Host name="localhost" appBase="webapps"
unpackWARs="true" 
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="ROOT" debug="0" reloadable="true"></Context>
...
</host>
6 數據源配置 比較複雜,各個版本都有所不同,請直接查看 http://java2000.net/p1906,包括tomcat5.0,tomcat5.5x,tomcat6.0的各個版本的配置方法。 更多關於Tomcat的使用,請看參考資料 Tomcat配置的10個技巧 1. 配置系統管理(Admin Web Application) 大多數商業化的J2EE服務器都提供一個功能強大的管理界面,且大都採用易於理解的Web應用界面。Tomcat按照自己的方式,同樣提供一個成熟的管理 工具,並且絲毫不遜於那些商業化的競爭對手。Tomcat的Admin Web Application最初在4.1版本時出現,當時的功能包括管理context、data source、user和group等。當然也可以管理像初始化參數,user、group、role的多種數據庫管理等。在後續的版本中,這些功能將得 到很大的擴展,但現有的功能已經非常實用了。 Admin Web Application被定義在自動部署文件:`CATALINA_BASE/webapps/admin.xml` 。 必須編輯這個文件,以確定Context中的docBase參數是絕對路徑。也就是說, `CATALINA_BASE/webapps/admin.xml` 的路徑是絕對路徑。作爲另外一種選擇,也可以刪除這個自動部署文件,而在server.xml文件中建立一個Admin Web Application的context,效果是一樣的。不能管理Admin Web Application這個應用,換而言之,除了刪除CATALINA_BASE/webapps/admin.xml ,可能什麼都做不了。 如果使用UserDatabaseRealm(默認),將需要添加一個user以及一個role到CATALINA_BASE/conf/tomcat-users.xml 文件中。你編輯這個文件,添加一個名叫“admin”的role 到該文件中,如下: 同樣需要有一個用戶,並且這個用戶的角色是“admin”。象存在的用戶那樣,添加一個用戶(改變密碼使其更加安全): 當完成這些步驟後,請重新啓動Tomcat,訪問http://localhost:8080/admin,將看到一個登錄界面。Admin Web Application採用基於容器管理的安全機制,並採用了Jakarta Struts框架。一旦作爲“admin”角色的用戶登錄管理界面,將能夠使用這個管理界面配置Tomcat。 2.配置應用管理(Manager Web Application) Manager Web Application讓你通過一個比Admin Web Application更爲簡單的用戶界面,執行一些簡單的Web應用任務。 Manager Web Application被被定義在一個自動部署文件中: CATALINA_BASE/webapps/manager.xml 。 必須編輯這個文件,以確保context的docBase參數是絕對路徑,也就是說CATALINA_HOME/server/webapps/manager的絕對路徑。 如果使用的是UserDatabaseRealm,那麼需要添加一個角色和一個用戶到CATALINA_BASE/conf/tomcat-users.xml文件中。接下來,編輯這個文件,添加一個名爲“manager”的角色到該文件中: 同樣需要有一個角色爲“manager”的用戶。像已經存在的用戶那樣,添加一個新用戶(改變密碼使其更加安全): 然後重新啓動Tomcat,訪問http://localhost/manager/list,將看到一個很樸素的文本型管理界面,或者訪問http: //localhost/manager/html/list,將看到一個HMTL的管理界面。不管是哪種方式都說明你的Manager Web Application現在已經啓動了。 Manager application可以在沒有系統管理特權的基礎上,安裝新的Web應用,以用於測試。如果我們有一個新的web應用位於 /home/user/hello下在,並且想把它安裝到 /hello下,爲了測試這個應用,可以這麼做,在第一個文件框中輸入“/hello”(作爲訪問時的path),在第二個文本框中輸入“file: /home/user/hello”(作爲Config URL)。 Manager application還允許停止、重新啓動、移除以及重新部署一個web應用。停止一個應用使其無法被訪問,當有用戶嘗試訪問這個被停止的應用時,將 看到一個503的錯誤——“503 - This application is not currently available”。 移除一個web應用,只是指從Tomcat的運行拷貝中刪除了該應用,如果重新啓動Tomcat,被刪除的應用將再次出現(也就是說,移除並不是指從硬盤上刪除)。 3.部署一個web應用 有兩個辦法可以在系統中部署web服務。 1> 拷貝WAR文件或者web應用文件夾(包括該web的所有內容)到$CATALINA_BASE/webapps目錄下。 2> 爲web服務建立一個只包括context內容的XML片斷文件,並把該文件放到$CATALINA_BASE/webapps目錄下。這個web應用本身可以存儲在硬盤上的任何地方。 如果有一個WAR文件,想部署它,則只需要把該文件簡單的拷貝到CATALINA_BASE/webapps目錄下即可,文件必須以“。war”作 爲擴展名。一旦Tomcat監聽到這個文件,它將(缺省的)解開該文件包作爲一個子目錄,並以WAR文件的文件名作爲子目錄的名字。接下來,Tomcat 將在內存中建立一個context,就好象在server.xml文件裏建立一樣。當然,其他必需的內容,將從server.xml中的 DefaultContext獲得。 部署web應用的另一種方式是寫一個Context XML片斷文件,然後把該文件拷貝到CATALINA_BASE/webapps目錄下。一個Context片斷並非一個完整的XML文件,而只是一個 context元素,以及對該應用的相應描述。這種片斷文件就像是從server.xml中切取出來的context元素一樣,所以這種片斷被命名爲 “context片斷”。 舉個例子,如果我們想部署一個名叫MyWebApp.war的應用,該應用使用realm作爲訪問控制方式,我們可以使用下面這個片斷: 把該片斷命名爲“MyWebApp.xml”,然後拷貝到CATALINA_BASE/webapps目錄下。 這種context片斷提供了一種便利的方法來部署web應用,不需要編輯server.xml,除非想改變缺省的部署特性,安裝一個新的web應用時不需要重啓動Tomcat。 4.配置虛擬主機(Virtual Hosts) 關於server.xml中“Host”這個元素,只有在設置虛擬主機的才需要修改。虛擬主機是一種在一個web服務器上服務多個域名的機制,對每個域 名而言,都好象獨享了整個主機。實際上,大多數的小型商務網站都是採用虛擬主機實現的,這主要是因爲虛擬主機能直接連接到Internet並提供相應的帶 寬,以保障合理的訪問響應速度,另外虛擬主機還能提供一個穩定的固定IP。 基於名字的虛擬主機可以被建立在任何web服務器上,建立的方法就是通過在域名服務器(DNS)上建立IP地址的別名,並且告訴web服務器把去往不同域 名的請求分發到相應的網頁目錄。 在Tomcat中使用虛擬主機,需要設置DNS或主機數據。爲了測試,爲本地IP設置一個IP別名就足夠了,接下來,你需要在server.xml中添加幾行內容,如下: Tomcat的server.xml文件,在初始狀態下,只包括一個虛擬主機,但是它容易被擴充到支持多個虛擬主機。在前面的例子中展示的是一個簡單的 server.xml版本,其中粗體部分就是用於添加一個虛擬主機。每一個Host元素必須包括一個或多個context元素,所包含的context元 素中必須有一個是默認的context,這個默認的context的顯示路徑應該爲空(例如,path=“”)。 5.配置基礎驗證(Basic Authentication) 容器管理驗證方法控制着當用戶訪問受保護的web應用資源時,如何進行用戶的身份鑑別。當一個web應用使用了Basic Authentication(BASIC參數在web.xml文件中auto-method元素中設置),而有用戶訪問受保護的web應用時, Tomcat將通過HTTP Basic Authentication方式,彈出一個對話框,要求用戶輸入用戶名和密碼。在這種驗證方法中,所有密碼將被以64位的編碼方式在網絡上傳輸。 注意:使用Basic Authentication通過被認爲是不安全的,因爲它沒有強健的加密方法,除非在客戶端和服務器端都使用HTTPS或者其他密碼加密碼方式(比如, 在一個虛擬私人網絡中)。若沒有額外的加密方法,網絡管理員將能夠截獲(或濫用)用戶的密碼。但是,如果是剛開始使用Tomcat,或者你想在你的 web應用中測試一下基於容器的安全管理,Basic Authentication還是非常易於設置和使用的。只需要添加兩個元素到web應用的web.xml文件中,並且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加適當的即可,然後重新啓動Tomcat。 6.配置單點登錄(Single Sign-On) 一旦設置了realm和驗證的方法,就需要進行實際的用戶登錄處理。一般說來,對用戶而言登錄系統是一件很麻煩的事情,必須儘量減少用戶登錄驗證的 次數。作爲缺省的情況,當用戶第一次請求受保護的資源時,每一個web應用都會要求用戶登錄。如果運行了多個web應用,並且每個應用都需要進行單獨的 用戶驗證,那這看起來就有點像在用戶搏鬥。用戶們不知道怎樣才能把多個分離的應用整合成一個單獨的系統,所有用戶也就不知道他們需要訪問多少個不 同的應用,只是很迷惑,爲什麼總要不停的登錄。 Tomcat 4的“single sign-on”特性允許用戶在訪問同一虛擬主機下所有web應用時,只需登錄一次。爲了使用這個功能,只需要在Host上添加一個SingleSignOn Valve元素即可,如下所示: 在Tomcat初始安裝後,server.xml的註釋裏面包括SingleSignOn Valve配置的例子,只需要去掉註釋,即可使用。那麼,任何用戶只要登錄過一個應用,則對於同一虛擬主機下的所有應用同樣有效。 使用single sign-on valve有一些重要的限制: 1> value必須被配置和嵌套在相同的Host元素裏,並且所有需要進行單點驗證的web應用(必須通過context元素定義)都位於該Host下。 2> 包括共享用戶信息的realm必須被設置在同一級Host中或者嵌套之外。 3> 不能被context中的realm覆蓋。 4> 使用單點登錄的web應用最好使用一個Tomcat的內置的驗證方式(被定義在web.xml中的中),這比自定 義的驗證方式強,Tomcat內置的的驗證方式包括basic、digest、form和client-cert。 5> 如果你使用單點登錄,還希望集成一個第三方的web應用到你的網站中來,並且這個新的web應用使用它自己的驗證方式,而不使用容器管理安全,那你基本上 就沒招了。用戶每次登錄原來所有應用時需要登錄一次,並且在請求新的第三方應用時還得再登錄一次。 6> 單點登錄需要使用cookies。 7.配置用戶定製目錄(Customized User Directores) 一些站點允許個別用戶在服務器上發佈網頁。例如,一所大學的學院可能想給每一位學生一個公共區域,或者是一個ISP希望給一些web空間給他的客戶,但這又不是虛擬主機。在這種情況下,一個典型的方法就是在用戶名前面加一個特殊字符(~),作爲每位用戶的網站,比如: http://www.cs.myuniversity.edu/~username提供兩種方法在主機上映射這些個人網站,主要使用一對特殊的Listener元素。Listener的className屬性應該是 org.apache.catalina.startup.UserConfig,userClass屬性應該是幾個映射類之一。如果電腦系統是 Unix,它將有一個標準的/etc/passwd文件,該文件中的帳號能夠被運行中的Tomcat很容易的讀取,該文件指定了用戶的主目錄,使用 PasswdUserDatabase 映射類。 ``` http://members.mybigisp.com/~username Tomcat ``` web文件需要放置在像/home/users/ian/public_html 或者 /users/jbrittain/public_html一樣的目錄下面。當然你也可以改變public_html 到其他任何子目錄下。 實際上,這個用戶目錄根本不一定需要位於用戶主目錄下里面。如果你沒有一個密碼文件,但你又想把一個用戶名映射到公共的像/home一樣目錄的子目錄裏面,則可以使用HomesUserDatabase類。 ``` ``` 這樣一來,web文件就可以位於像/home/ian/public_html 或者 /home/jasonb/public_html一樣的目錄下。這種形式對Windows而言更加有利,你可以使用一個像c:\home這樣的目錄。 這些Listener元素,如果出現,則必須在Host元素裏面,而不能在context元素裏面,因爲它們都用應用於Host本身。 8.在Tomcat中使用CGI腳本 Tomcat主要是作爲Servlet/JSP容器,但它也有許多傳統web服務器的性能。支持通用網關接口(Common Gateway Interface,即CGI)就是其中之一,CGI提供一組方法在響應瀏覽器請求時運行一些擴展程序。CGI之所以被稱爲通用,是因爲它能在大多數程序 或腳本中被調用,包括:Perl,Python,awk,Unix shell scripting等,甚至包括Java。不會把一個Java應用程序當作CGI來運行,畢竟這樣太過原始。一般而言,開發Servlet總 要比CGI具有更好的效率,因爲當用戶點擊一個鏈接或一個按鈕時,不需要從操作系統層開始進行處理。 Tomcat包括一個可選的CGI Servlet,允許你運行遺留下來的CGI腳本。 爲了使Tomcat能夠運行CGI,必須做的幾件事: 1. 把`servlets-cgi.renametojar` (在CATALINA_HOME/server/lib/目錄下)改名爲servlets-cgi.jar。處理CGI的servlet應該位於Tomcat的CLASSPATH下。 2. 在Tomcat的CATALINA_BASE/conf/web.xml 文件中,把關於 CGI的那段的註釋去掉(默認情況下,該段位於第241行)。 3. 同樣,在Tomcat的CATALINA_BASE/conf/web.xml文件中,把關於對CGI進行映射的那段的註釋去掉(默認情況下,該段位於第299行)。注意,這段內容指定了HTML鏈接到CGI腳本的訪問方式。 4. 可以把CGI腳本放置在WEB-INF/cgi 目錄下(注意,WEB-INF是一個安全的地方,你可以把一些不想被用戶看見或基於安全考慮不想暴露的文件放在此處),或者也可以把CGI腳本放置在 context下的其他目錄下,併爲CGI Servlet調整cgiPathPrefix初始化參數。這就指定的CGI Servlet的實際位置,且不能與上一步指定的URL重名。 5. 重新啓動Tomcat,你的CGI就可以運行了。 在Tomcat中,CGI程序缺省放置在WEB-INF/cgi目錄下,正如前面所提示的那樣,WEB-INF目錄受保護的,通過客戶端的瀏覽器無法窺探 到其中內容,所以對於放置含有密碼或其他敏感信息的CGI腳本而言,這是一個非常好的地方。爲了兼容其他服務器,儘管你也可以把CGI腳本保存在傳統的 /cgi-bin目錄,但要知道,在這些目錄中的文件有可能被網上好奇的衝浪者看到。另外,在Unix中,請確定運行Tomcat的用戶有執行CGI腳本 的權限。 9.改變Tomcat中的JSP編譯器(JSP Compiler) 在Tomcat 4.1(或更高版本,大概),JSP的編譯由包含在Tomcat裏面的Ant程序控制器直接執行。這聽起來有一點點奇怪,但這正是Ant有意爲之的一部 分,有一個API文檔指導開發者在沒有啓動一個新的JVM的情況下,使用Ant。這是使用Ant進行Java開發的一大優勢。另外,這也意味着你現在能夠 在Ant中使用任何javac支持的編譯方式,這裏有一個關於Apache Ant使用手冊的javac page列表。使用起來是容易的,因爲你只需要在 元素中定義一個名字叫“compiler”,並且在value中有一個支持編譯的編譯器名字,示例如下: ``` jsp org.apache.jasper.servlet.JspServlet logVerbosityLevel WARNING compiler jikes 3 ``` 當然,給出的編譯器必須已經安裝在你的系統中,並且CLASSPATH可能需要設置,那處決於你選擇的是何種編譯器。 10.限制特定主機訪問(Restricting Access to Specific Hosts) 有時,可能想限制對Tomcat web應用的訪問,比如,希望只有指定的主機或IP地址可以訪問應用。這樣一來,就只有那些指定的的客戶端可以訪問服務的內容了。爲了實現這種效 果,Tomcat提供了兩個參數供你配置:RemoteHostValve 和RemoteAddrValve。 通過配置這兩個參數,可以讓你過濾來自請求的主機或IP地址,並允許或拒絕哪些主機/IP。與之類似的,在Apache的httpd文件裏有對每個目錄的允許/拒絕指定。 可以把Admin Web application設置成只允許本地訪問,設置如下: 如果沒有給出允許主機的指定,那麼與拒絕主機匹配的主機就會被拒絕,除此之外的都是允許的。與之類似,如果沒有給出拒絕主機的指定,那麼與允許主機匹配的主機就會被允許,除此之外的都是拒絕的。 resin安裝 http://fangniuwa.blog.51cto.com/10209030/1763488/ ##1、java的安裝 jdk下載地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1.1、安裝jdk-1.8 [root@fnw ~]# ls anaconda-ks.cfg Desktop jdk-8u77-linux-x64.rpm [root@fnw ~]# rpm -ivh jdk-8u77-linux-x64.rpm [root@fnw ~]# java -version openjdk version "1.8.0_65" OpenJDK Runtime Environment (build 1.8.0_65-b17) OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode) [root@fnw ~]# javac ………… 略 [root@fnw ~]# java ………… 略 1.2 jdk環境變量的配置 [root@fnw ~]# echo "JAVA_HOME=/usr/java/jdk1.8.0_77" >> /etc/profile [root@fnw ~]# echo "JRE_HOME=/usr/java/jdk1.8.0_77/jre" >> /etc/profile [root@fnw ~]# echo "PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin" >> /etc/profile [root@fnw ~]# echo "CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib" >> /etc/profile [root@fnw ~]# echo "export JAVA_HOME JRE_HOME PATH CLASSPATH" >> /etc/profile [root@fnw ~]# tail -5 /etc/profile JAVA_HOME=/usr/java/jdk1.8.0_77 JRE_HOME=/usr/java/jdk1.8.0_77/jre PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/bin:/bin:/usr/java/jdk1.8.0_77/bin:/usr/java/jdk1.8.0_77/jre/bin CLASSPATH=.:/usr/java/jdk1.8.0_77/lib/dt.jar:/usr/java/jdk1.8.0_77/lib/tools.jar:/usr/java/jdk1.8.0_77/jre/lib export JAVA_HOME JRE_HOME PATH CLASSPATH [root@fnw ~]# source /etc/profile ###2、resin的安裝 2.1、下載安裝resin resin的載地址 http://caucho.com/products/resin/download [root@fnw ~]# rpm -ivh resin-pro-4.0.45-1.x86_64.rpm warning: resin-pro-4.0.45-1.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 6ef6d565: NOKEY error: Failed dependencies: openssl-devel is needed by resin-pro-4.0.45-1.x86_64 [root@fnw ~]# yum install openssl-devel -y [root@fnw ~]# rpm -ivh resin-pro-4.0.45-1.x86_64.rpm warning: resin-pro-4.0.45-1.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 6ef6d565: NOKEY Preparing... ################################# [100%] Updating / installing... 1:resin-pro-4.0.45-1 ################################# [100%] Resin/4.0.45 launching watchdog at 127.0.0.1:6600 Resin/4.0.45 started -server 'app-0' with watchdog at 127.0.0.1:6600 2.2、resin環境變量的配置 [root@fnw resin]# echo "RESIN_HOME=/usr/local/share/resin" >> /etc/profile [root@fnw resin]# echo "RESIN_ROOT=/var/resin" >> /etc/profile [root@fnw resin]# echo "export RESIN_HOME RESIN_ROOT" >> /etc/profile [root@fnw resin]# source /etc/profile 2.3、resin主要目錄簡介 /etc/resin/resin.properties # properties 配置文件,以key:value 形式出現,供resin.xml使用 /etc/resin/resin.xml # resin主配置文件 /var/resin/ # resin的根目錄 /var/resin/webapps/ # web應用程序在resin默認部署目錄 /var/log/resin/ # resin服務器日誌存放目錄 /usr/local/share/resin # resin服務器的家目錄(主要存放resin的啓動腳本、運行過程常用的jar包、resin的一些常用動態庫文件) [root@fnw resin]# tree /usr/local/share/resin /usr/local/share/resin ├── bin # resin的啓動腳本 │ ├── resinctl │ ├── resinctl.in │ ├── resin.sh │ ├── start.bat │ └── stop.bat ├── lib # 運行過程常用的jar包 │ ├── activation.jar │ ├── activation.LICENSE │ ├── eclipselink-2.4.0.jar │ ├── hibernate-validator-4.3.0.Final.jar │ ├── javaee-16.jar │ ├── javamail-141.jar │ ├── javamail-14.LICENSE │ ├── javax.faces-2.1.24.jar │ ├── jboss-logging-3.1.0.CR2.jar │ ├── jsf.LICENSE │ ├── pro.jar │ ├── resin-eclipselink.jar │ ├── resin.jar │ ├── validation-api-1.0.0.GA.jar │ ├── webservices-extra-api.jar │ ├── webservices.LICENSE │ └── webutil.jar └── libexec64 # resin的一些常用動態庫文件 ├── libresin_os.so ├── libresin.so └── libresinssl.so 2.4、resin的啓動 [root@fnw resin]# bin/resinctl -conf /etc/resin/resin.xml start 2.5、java進程查看命令 [root@fnw resin]# jps 48643 WatchdogManager 48691 Resin 48761 Jps ###3、jdk1.8和resin4.0自動化安裝shell腳本 ####1、install jdk1.8.0_77 rpm -ivh jdk-8u77-linux-x64.rpm ####2、config jdk1.8.0_77 environment echo "JAVA_HOME=/usr/java/jdk1.8.0_77" >> /etc/profile echo "JRE_HOME=/usr/java/jdk1.8.0_77/jre" >> /etc/profile echo "PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin" >> /etc/profile echo "CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib" >> /etc/profile echo "export JAVA_HOME JRE_HOME PATH CLASSPATH" >> /etc/profile tail -5 /etc/profile source /etc/profile ####3、install resin4.0.45 yum install openssl-devel -y rpm -ivh resin-pro-4.0.45-1.x86_64.rpm ####4、config resin4.0.45 environment echo "RESIN_HOME=/usr/local/share/resin" >> /etc/profile echo "RESIN_ROOT=/var/resin" >> /etc/profile echo "export RESIN_HOME RESIN_ROOT" >> /etc/profile source /etc/profile ####5、running resin bin/resinctl -conf /etc/resin/resin.xml start 1 tomcat 單機多實例 http://www.ttlsa.com/tomcat/config-multi-tomcat-instance/ java不同於php,單個站點更新維護都會影響到其他站點,一般都會將幾個站點放在一個實例下。今天全稱演示單臺服務器如何配置多個tomcat實例。 環境 tomcat:/usr/local/tomcat-7.0.50 a.ttlsa.com 站點程序:/data/site/a.ttlsa.com 端口:8080 b.ttlsa.com 站點程序:/data/site/b.ttlsa.com 端口:8081 1. tomcat安裝 安裝很簡單,配置好jdk與解壓tomcat即可,關於《tomcat安裝》我這邊不再重複了。 如果連接失效,請複製http://www.ttlsa.com/web/install-tomcat7-on-linux/ 2. 配置多實例目錄 在tomcat安裝目錄下創建a.ttlsa.com、b.ttlsa.com,並且將conf、logs、webapp、temp、work目錄拷貝到這兩個目錄,然後tomcat安裝目錄只需要留下bin、a.ttlsa.com、b.ttlsa.com、lib這4個目錄即可。配置後的目錄結構如下: # pwd /usr/local/tomcat-7.0.50 # tree -d -L 2 ├── bin ├── a.ttlsa.com │ ├── conf │ ├── logs │ ├── target │ ├── temp │ ├── webapp │ └── work ├── lib └── b.ttlsa.com ├── conf ├── logs ├── temp ├── webapp └── work # pwd /usr/local/tomcat-7.0.50 # tree -d -L 2 ├── bin ├── a.ttlsa.com │ ├── conf │ ├── logs │ ├── target │ ├── temp │ ├── webapp │ └── work ├── lib └── b.ttlsa.com ├── conf ├── logs ├── temp ├── webapp └── work 3. 配置站點server.xml 3.1 配置a.ttlsa.com ``` # vim /usr/local/tomcat-7.0.50/a.ttlsa.com/conf/server.xml //註釋ajp //server端口8005改爲8001 //在增加host配置,如下 ``` ``` # vim /usr/local/tomcat-7.0.50/a.ttlsa.com/conf/server.xml //註釋ajp //server端口8005改爲8001 //在增加host配置,如下 ``` 3.2 配置b.ttlsa.com ``` # vim /usr/local/tomcat-7.0.50/a.ttlsa.com/conf/server.xml //註釋ajp //server端口8005改爲8002 //在增加host配置,如下 ``` ``` # vim /usr/local/tomcat-7.0.50/a.ttlsa.com/conf/server.xml //註釋ajp //server端口8005改爲8002 //在增加host配置,如下 ``` 4. 多實例啓動腳本 在a.ttlsa.com、b.ttlsa.com目錄下分別創建啓動腳本tomcat.sh 4.1 腳本內容tomcat.sh #!/bin/sh # AuthName:涼白開 # Website:http://www.ttlsa.com # DateTime:2014-05-04 # description: 啓動tomcat多實例. . /etc/init.d/functions RETVAL=$? # tomcat實例目錄 export CATALINA_BASE="$PWD" # tomcat安裝目錄 export CATALINA_HOME="/usr/local/tomcat-7.0.50" # 可選 export JVM_OPTIONS="-Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m" case "$1" in start) if [ -f $CATALINA_HOME/bin/startup.sh ];then echo $"Start Tomcat" $CATALINA_HOME/bin/startup.sh fi ;; stop) if [ -f $CATALINA_HOME/bin/shutdown.sh ];then echo $"Stop Tomcat" $CATALINA_HOME/bin/shutdown.sh fi ;; *) echo $"Usage: $0 {start|stop}" exit 1 ;; esac exit $RETVAL #!/bin/sh # AuthName:涼白開 # Website:http://www.ttlsa.com # DateTime:2014-05-04 # description: 啓動tomcat多實例. . /etc/init.d/functions RETVAL=$? # tomcat實例目錄 export CATALINA_BASE="$PWD" # tomcat安裝目錄 export CATALINA_HOME="/usr/local/tomcat-7.0.50" # 可選 export JVM_OPTIONS="-Xms128m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m" case "$1" in start) if [ -f $CATALINA_HOME/bin/startup.sh ];then echo $"Start Tomcat" $CATALINA_HOME/bin/startup.sh fi ;; stop) if [ -f $CATALINA_HOME/bin/shutdown.sh ];then echo $"Stop Tomcat" $CATALINA_HOME/bin/shutdown.sh fi ;; *) echo $"Usage: $0 {start|stop}" exit 1 ;; esac exit $RETVAL 4.2 啓動腳本賦權限 # chmod a+x tomcat.sh # chmod a+x tomcat.sh 5. 啓動測試 5.1 啓動/關閉a.ttlsa.com 啓動 # cd /usr/local/tomcat-7.0.50/a.ttlsa.com/ # ./tomcat.sh start 關閉 # cd /usr/local/tomcat-7.0.50/a.ttlsa.com/ # ./tomcat.sh stop 啓動 # cd /usr/local/tomcat-7.0.50/a.ttlsa.com/ # ./tomcat.sh start 關閉 # cd /usr/local/tomcat-7.0.50/a.ttlsa.com/ # ./tomcat.sh stop 5.2 啓動/關閉b.ttlsa.com 啓動 # cd /usr/local/tomcat-7.0.50/a.ttlsa.com/ # ./tomcat.sh start 關閉 # cd /usr/local/tomcat-7.0.50/a.ttlsa.com/ # ./tomcat.sh stop 啓動 # cd /usr/local/tomcat-7.0.50/a.ttlsa.com/ # ./tomcat.sh start 關閉 # cd /usr/local/tomcat-7.0.50/a.ttlsa.com/ # ./tomcat.sh stop 備註:一定需要cd到tomcat.sh的當前目錄下執行纔可以 6. 結束 配置到此結束,如果需要操作多個實例顯得比較麻煩,大家可以自行寫統一的腳本,我這邊有自己的一份,有需要的可以找我要。內容比較多,就不貼出來了。 2 tomcat的jvm設置和連接數設置 http://www.cnblogs.com/bluestorm/archive/2013/04/23/3037392.html Tomcat的JVM設置和連接數設置 Windows環境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件開頭增加如下設置: set JAVA_OPTS=-Xms256m -Xmx512m Linux環境下修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件開頭增加如下設置: JAVA_OPTS=’-Xms256m -Xmx512m’ 其中,-Xms設置初始化內存大小,-Xmx設置可以使用的最大內存。 -------------------------------------- 一、Tomcat的JVM提示內存溢出 查看%TOMCAT_HOME%\logs文件夾下,日誌文件是否有內存溢出錯誤 二、修改Tomcat的JVM 1、錯誤提示:`java.lang.OutOfMemoryError: Java heap space` Tomcat默認可以使用的內存爲128MB,在較大型的應用項目中,這點內存是不夠的,有可能導致系統無法運行。常見的問題是報Tomcat內存溢出錯誤,Out of Memory(系統內存不足)的異常,從而導致客戶端顯示500錯誤,一般調整Tomcat的使用內存即可解決此問題。 Windows環境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件開頭增加如下設置:`set JAVA_OPTS=-Xms256m -Xmx512m` Linux環境下修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件開頭增加如下設置:`JAVA_OPTS=’-Xms256m -Xmx512m’` 其中,-Xms設置初始化內存大小,-Xmx設置可以使用的最大內存。 2、錯誤提示: java.lang.OutOfMemoryError: PermGen space 原因: PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域,這塊內存主要是被JVM存 放Class和Meta信息的,Class在被Loader時就會被放到PermGen space中,它和存放類實例(Instance)的 Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的應用 中有很CLASS的話,就很可能出現PermGen space錯誤,這種錯誤常見在web服務器對JSP進行pre compile的 時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那麼就會產生此錯誤信 息了。 解決方法: 在catalina.bat的第一行增加: set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m - XX:MaxPermSize=256m 在catalina.sh的第一行增加: JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m - XX:MaxPermSize=256m 3、JVM設置 堆的尺寸 -Xmssize in bytes 設定Java堆的初始尺寸,缺省尺寸是2097152 (2MB)。這個值必須是1024個字節(1KB)的倍數,且比它大。(-server選項把缺省尺寸增加到32M。) -Xmnsize in bytes 爲Eden對象設定初始Java堆的大小,缺省值爲640K。(-server選項把缺省尺寸增加到2M。) -Xmxsize in bytes 設定Java堆的最大尺寸,缺省值爲64M,(-server選項把缺省尺寸增加到128M。) 最大的堆尺寸達到將近2GB(2048MB)。 請注意:很多垃圾收集器的選項依賴於堆大小的設定。請在微調垃圾收集器使用內存空間的方式之前,確認是否已經正確設定了堆的尺寸。 垃圾收集:內存的使用 -XX:MinHeapFreeRatio=percentage as a whole number 修改垃圾回收之後堆中可用內存的最小百分比,缺省值是40。如果垃圾回收後至少還有40%的堆內存沒有被釋放,則系統將增加堆的尺寸。 -XX:MaxHeapFreeRatio=percentage as a whole number 改變垃圾回收之後和堆內存縮小之前可用堆內存的最大百分比,缺省值爲70。這意味着如果在垃圾回收之後還有大於70%的堆內存,則系統就會減少堆的尺寸。 -XX:NewSize=size in bytes 爲已分配內存的對象中的Eden代設置缺省的內存尺寸。它的缺省值是640K。(-server選項把缺省尺寸增加到2M。) -XX:MaxNewSize=size in bytes 允許您改變初期對象空間的上限,新建對象所需的內存就是從這個空間中分配來的,這個選項的缺省值是640K。(-server選項把缺省尺寸增加到2M。) -XX:NewRatio=value 改變新舊空間的尺寸比例,這個比例的缺省值是8,意思是新空間的尺寸是舊空間的1/8。 -XX:SurvivorRatio=number 改變Eden對象空間和殘存空間的尺寸比例,這個比例的缺省值是10,意思是Eden對象空間的尺寸比殘存空間大survivorRatio+2倍。 -XX:TargetSurvivorRatio=percentage 設定您所期望的空間提取後被使用的殘存空間的百分比,缺省值是50。 -XX:MaxPermSize=size in MB 長久代(permanent generation)的尺寸,缺省值爲32(32MB)。 三、查看Tomcat的JVM內存 1. Tomcat6中沒有設置任何默認用戶,因而需要手動往Tomcat6的conf文件夾下的tomcat-users.xml文件中添加用戶。 如: 注:添加完需要重啓Tomcat6。 2. 訪問http://localhost:8080/manager/status,輸入上面添加的用戶名和密碼。 3. 然後在如下面的JVM下可以看到內存的使用情況。 JVM Free memory: 2.50 MB Total memory: 15.53 MB Max memory: 63.56 MB 四、Tomcat連接數設置 在tomcat配置文件server.xml中的配置中,和連接數相關的參數有: minProcessors:最小空閒連接線程數,用於提高系統處理性能,默認值爲10 maxProcessors:最大連接線程數,即:併發處理的最大請求數,默認值爲75 acceptCount:允許的最大連接數,應大於等於maxProcessors,默認值爲100 enableLookups:是否反查域名,取值爲:true或false。爲了提高處理能力,應設置爲false connectionTimeout:網絡連接超時,單位:毫秒。設置爲0表示永不超時,這樣設置有隱患的。通常可設置爲30000毫秒。 其中和最大連接數相關的參數爲maxProcessors和acceptCount。如果要加大併發連接數,應同時加大這兩個參數。 web server允許的最大連接數還受制於操作系統的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。Unix中如何設置這些參數,請參閱Unix常用監控和管理命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章