tomcat專題二:jdk安裝以及tomcat基本安裝和使用
書接tomcat專題一,在這一節將介紹一下java運行環境的安裝以及tomcat的基本安裝和使用。可能有人會問安裝tomcat跟java運行環境有什麼關係?正像專題一介紹的那樣,tomcat本身只是一個業務框架,一個WEB容器,其底層還是基於jvm虛擬機來運行java程序的字節碼文件。可以認爲tomcat負責接受上層的應用請求,然後將請求的java程序交與jvm虛擬機執行並返回結果,這之間形成了一個調用關係,這在下面的tomcat啓動時我會點出來。
系統環境準備:
OS: CentOS 6.4x64
software: /root/soft
jdk: jdk-7u51-linux-x64.tar.gz
tomcat: apache-tomcat-7.0.42.tar.gz
1.JDK安裝
在生成環境中,安裝java環境都是選擇安裝JDK,既包括JRE,也包括其它一些開發使用的java類庫。
安裝過程:
[root@node10 soft]# ls
apache-tomcat-7.0.42.tar.gz jdk-7u51-linux-x64.tar.gz
[root@node10 soft]# tar -zxvfjdk-7u51-linux-x64.tar.gz
[root@node10 soft]# ls
apache-tomcat-7.0.42.tar.gz jdk1.7.0_51 jdk-7u51-linux-x64.tar.gz
[root@node10 soft]# mv jdk1.7.0_51 /usr/local/jdk1.7
[root@node10 soft]# cd /usr/local/
[root@node10 local]# ls
bin etc games include jdk1.7 lib lib64 libexec sbin share src
[root@node10 local]#
經過上面的過程,jdk軟件包已經安裝到系統中了。安裝看起來很簡單,不用懷疑,安裝過程就是這麼的簡單。但是有人疑問了,這個時候如果你在系統中執行java命令或者javac命令,返回的結果將是沒有這個命令。看下面的測試:
[root@node10 local]# java
-bash: /usr/bin/java: No suchfile or directory
[root@node10 local]# javac
-bash: javac: command notfound
[root@node10 local]
這時有人可能就懷疑了,不是說jdk已經安裝好了嗎,爲什麼執行命令報沒有找到命令呢。這個問題就涉及到系統環境變量的問題。在linux系統中有一個特殊的環境變量PATH(其實在任何操作系統中都有),該變量保存了系統常見命令所在的路徑信息,當執行命令時,shell默認會依次查找PATH變量中導出的路徑中是否有該可執行文件,如果有就會順序執行並返回結果,如果沒有就會報沒有發現這個命令。
通常來說軟件的安裝有三種形式,一種是rpm包安裝,rpm包安裝的軟件都是經過特殊的定製,會按照系統的根文件系統目錄樹架構將所要安裝的軟件包所包含的文件放到相應的目錄中,因此rpm包安裝的軟件,安裝之後就可以執行命令;而另外兩種方式,一個是二進制文件解壓安裝,一個是源碼包編譯安裝,這兩種方式通常是自行指定路徑,因此安裝的文件不再系統默認的路徑下面,所以當執行命令時,在PATH變量所導出的路徑中找不到相關可執行文件就會報錯。因此,上面所執行的java或者javac命令的報錯就是這個原因。
設置JDK環境變量:
[root@node10 local]# vim/etc/profile
在該文件的最後,添加如下內容:
JAVA_HOME=/usr/local/jdk1.7
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JRE_HOME/lib/rt.jar
export JAVA_HOME JRE_HOMEPATH CLASSPATH
保存退出
root@node10 local]# source/etc/profile //重新加載該文件
[root@node10 local]# java
Usage: java [-options] class[args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server.
-cp <class search path of directoriesand zip/jar files>
-classpath <class search path ofdirectories and zip/jar files>
A : separated list ofdirectories, JAR archives,
and ZIP archives to searchfor class files.
-D<name>=<value>
set a system property
-verbose:[class|gc|jni]
..................此處省略顯示信息
[root@node10 local]# javac
Usage: javac <options><source files>
where possible optionsinclude:
-g Generate all debugginginfo
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about whatthe compiler is doing
-deprecation Output source locations wheredeprecated APIs are used
-classpath <path> Specify where to find user classfiles and annotation processors
-cp <path> Specify where to find userclass files and annotation processors
-sourcepath <path> Specify where to find input sourcefiles
-bootclasspath <path> Override location of bootstrap classfiles
-extdirs <dirs> Override location of installedextensions
-
.........................此處省略顯示信息
從上面的信息可見,通過導出java的環境變量,java和javac命令就可以正確執行了。
到此,jdk的安裝就結束了。
2.tomcat基本安裝使用
tomcat的安裝和JDK類似,這裏也是採用二進制安裝包進行安裝
安裝步驟:
[root@node10 soft]# ls
apache-tomcat-7.0.42.tar.gz jdk-7u51-linux-x64.tar.gz
[root@node10 soft]# tar -zxvf apache-tomcat-7.0.42.tar.gz
[root@node10 soft]# ls
apache-tomcat-7.0.42 apache-tomcat-7.0.42.tar.gz jdk-7u51-linux-x64.tar.gz
[root@node10 soft]# mv apache-tomcat-7.0.42 /usr/local/tomcat7
[root@node10 soft]# cd /usr/local/
[root@node10 local]# ls
bin etc games include jdk1.7 lib lib64 libexec sbin share
src tomcat7
[root@node10 local]#
到這裏,tomcat軟件也安裝完成了。
啓動tomcat軟件:
[root@node10 tomcat7]# pwd
/usr/local/tomcat7
[root@node10 tomcat7]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
[root@node10 tomcat7]# cd bin/
[root@node10 bin]# ls
bootstrap.jar commons-daemon.jar cpappend.bat setclasspath.bat startup.bat tool-wrapper.bat
catalina.bat commons-daemon-native.tar.gz daemon.sh setclasspath.sh startup.sh tool-wrapper.sh
catalina.sh configtest.bat digest.bat shutdown.bat tomcat-juli.jar version.bat
catalina-tasks.xml configtest.sh digest.sh shutdown.sh tomcat-native.tar.gz version.sh
[root@node10 bin]#
從上面的信息可見,在bin目錄下是一堆的腳本文件用來控制tomcat的啓動,停止。其中.bat是基於windows平臺的,.sh是基於linux平臺的。這裏面有個特殊的腳本就是catalina.sh,其實tomcat是一個學名,而tomcat的代碼名稱叫做catalina。因此這個腳本既可以控制tomcat的啓動,停止,還可以查看關於tomcat自身的一些相關信息,下面一一來介紹:
啓動tomcat:
[root@node10 bin]#./startup.sh //該命令用來在linux下啓動tomcat
Using CATALINA_BASE: /usr/local/tomcat7
Using CATALINA_HOME: /usr/local/tomcat7
Using CATALINA_TMPDIR:/usr/local/tomcat7/temp
Using JRE_HOME: /usr/local/jdk1.7/jre
Using CLASSPATH: /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
[root@node10 bin]#
這裏觀察一下tomcat的啓動輸出信息,是不是看到了JRE_HOME,對,這就是此前導出的java運行環境的變量JRE_HOME,從這裏可以看出,tomcat調用了java虛擬機:jvm。因此要想tomcat正常工作,則必須安裝JDK或者JRE。
查看catalina的輸出日誌:
[root@node10 logs]# pwd
/usr/local/tomcat7/logs
[root@node10 logs]# ls
catalina.2014-11-16.log host-manager.2014-11-16.log localhost_access_log.2014-11-16.txt
catalina.out localhost.2014-11-16.log manager.2014-11-16.log
切換到tomcat的日誌目錄,在該目錄下默認會有好幾個日誌文件,這裏先關注下catalina.out文件,其它的會在tomcat體系結構中詳細解釋
catalina.out文件之tomcat啓動時的所有信息的輸出文件,該文件還會記錄tomcat的訪問詳細記錄信息,因此該文件是瞭解tomcat工作正常與否的重要文件。所有關於tomcat的排錯都要依賴查看此文件的信息。就包括tomcat是否正常啓動,也要查看該文件、
[root@node10 logs]# tail -fcatalina.out
Nov 16, 2014 11:57:10 PMorg.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying webapplication directory /usr/local/tomcat7/webapps/examples
Nov 16, 2014 11:57:10 PMorg.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web applicationdirectory /usr/local/tomcat7/webapps/manager
Nov 16, 2014 11:57:10 PMorg.apache.coyote.AbstractProtocol start
INFO: StartingProtocolHandler ["http-bio-8080"]
Nov 16, 2014 11:57:10 PMorg.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler["ajp-bio-8009"]
Nov 16, 2014 11:57:10 PMorg.apache.catalina.startup.Catalina start
INFO: Server startup in 10039ms
上面的信息是查看catalina.out文件顯示的信息,只有看到最後的幾個start信息,以及server startup信息,並確保沒有任何的錯誤信息輸出,此時才能表明tomcat已經正常啓動並可以使用了。
這裏要強調一下的是,在生成環境中,因爲線上的程序部署根據其程序的大小等部署時長不一樣,這就導致了tomcat啓動的時候也不一樣,因此當你使用startup.sh啓動tomcat程序後,發現無法訪問頁面,但是查看tomcat監聽的端口也正常監聽,這個時候你就要注意很有可能是你的tomcat啓動還沒有完成,還處在部署程序的過程中。因此通常最好的習慣是,查看catalina.out文件確保tomcat程序啓動完成。
從上面的信息可見,tomcat默認監聽的http協議端口是8080端口,下面來訪問下tomcat的測試頁:
當看到上面的測試頁正常顯示時,表明tomcat軟件本身已經成功安裝。
停止tomcat:
[root@node10 bin]#./shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat7
Using CATALINA_HOME: /usr/local/tomcat7
Using CATALINA_TMPDIR:/usr/local/tomcat7/temp
Using JRE_HOME: /usr/local/jdk1.7/jre
Using CLASSPATH: /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
[root@node10 bin]#
catalina.sh腳本:
該腳本非常重要,其實startup.sh,shutdown.sh都是調用該腳本來完成tomcat的啓動和停止工作,查看下該腳本的使用:
[root@node10 bin]#./catalina.sh --help
Using CATALINA_BASE: /usr/local/tomcat7
Using CATALINA_HOME: /usr/local/tomcat7
Using CATALINA_TMPDIR:/usr/local/tomcat7/temp
Using JRE_HOME: /usr/local/jdk1.7/jre
Using CLASSPATH: /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
Usage: catalina.sh ( commands... )
commands:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the currentwindow
run -security Start in the current window with securitymanager
start Start Catalina in a separatewindow
start -security Start in a separate window with securitymanager
stop Stop Catalina, waiting up to 5seconds for the process to end
stop n Stop Catalina, waiting up to nseconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds andthen use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds andthen use kill -KILL if still running
configtest Run a basic syntax check on server.xml- check exit code for result
version What version of tomcat are yourunning?
Note: Waiting for the processto end and use of the -force option require that $CATALINA_PID is defined
從上面的信息可以看出,catalina.sh自身就可以實現tomcat的停止,啓動等工作,還能設置以什麼樣的方式啓動和停止,還能查看tomcat自身的版本信息。
example:
[root@node10 bin]#./catalina.sh version
Using CATALINA_BASE: /usr/local/tomcat7
Using CATALINA_HOME: /usr/local/tomcat7
Using CATALINA_TMPDIR:/usr/local/tomcat7/temp
Using JRE_HOME: /usr/local/jdk1.7/jre
Using CLASSPATH: /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar
Server version: ApacheTomcat/7.0.42
Server built: Jul 2 2013 08:57:41
Server number: 7.0.42.0
OS Name: Linux
OS Version: 2.6.32-279.el6.x86_64
Architecture: amd64
JVM Version: 1.7.0_51-b13
JVM Vendor: Oracle Corporation
[root@node10 bin]#】
關於其它的使用選項自行研究,不是很難。
3.使用jdk提供的命令監控jvm的運行狀況
sun jdk免費提供了監控和故障處理命令,在jdk的bin目錄下
jps:jvm process status tool:顯示指定系統內所有的hotspot進程。每一個jvm虛擬機就顯示一個bootstrap
示例:
[root@node10 bin]# ps aux | grep tomcat
root 4373 25.310.6 954360 52888 pts/0 Sl 00:19 0:02 /usr/local/jdk1.7/jre/bin/java-Djava.util.logging.config.file=/usr/local/tomcat7/conf/logging.properties-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager-Djava.endorsed.dirs=/usr/local/tomcat7/endorsed -classpath /usr/local/tomcat7/bin/bootstrap.jar:/usr/local/tomcat7/bin/tomcat-juli.jar-Dcatalina.base=/usr/local/tomcat7 -Dcatalina.home=/usr/local/tomcat7-Djava.io.tmpdir=/usr/local/tomcat7/temp org.apache.catalina.startup.Bootstrapstart
root 4404 0.0 0.1 103240 844 pts/0 S+ 00:20 0:00 grep tomcat
[root@node10 bin]# jps
4405 Jps
4373 Bootstrap
[root@node10 bin]#
從上面的信息可以看到,系統中運行了一個tomcat進程,其進程好是4373,在使用jps查看時,發現顯示了一個bootstrap,其限制的id號也是4373.因此一個bootstrap就代表了一個jvm。
jstat, jvm sttistics monitoring tool: 收集並顯示hotspot虛擬機各方面的數據信息
示例:
[root@node10 bin]# jstat -gcnew 4373
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
576.0 576.0 0.0 576.0 1 15 288.0 4800.0 2399.2 19 0.067
[root@node10 bin]#
關於jstat這個命令,功能非常強大,之後會專門介紹一下。
jinfo:顯示正在運行的hotspot虛擬機配置信息
示例:
輸出的信息比較多,這裏就不貼了,請自行查看。
jmap:生成某hotspot虛擬機的內存轉儲快照
示例:
[root@node10 bin]# jmap 4373
Attaching to process ID 4373, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.51-b03
0x0000000000400000 7K /usr/local/jdk1.7/jre/bin/java
0x0000003ae4c00000 153K /lib64/ld-2.12.so
0x0000003ae5000000 22K /lib64/libdl-2.12.so
0x0000003ae5400000 1873K /lib64/libc-2.12.so
0x0000003ae5800000 142K /lib64/libpthread-2.12.so
0x0000003ae6000000 584K /lib64/libm-2.12.so
0x0000003ae6400000 45K /lib64/librt-2.12.so
0x0000003ae7000000 111K /lib64/libresolv-2.12.so
0x0000003ae7400000 91K /lib64/libgcc_s-4.4.6-20120305.so.1
0x00007f2b5886e000 26K /lib64/libnss_dns-2.12.so
0x00007f2b58c8a000 250K /usr/local/jdk1.7/jre/lib/amd64/libsunec.so
0x00007f2b60034000 44K /usr/local/jdk1.7/jre/lib/amd64/libmanagement.so
0x00007f2b6026d000 112K /usr/local/jdk1.7/jre/lib/amd64/libnet.so
0x00007f2b60484000 89K /usr/local/jdk1.7/jre/lib/amd64/libnio.so
0x00007f2b6131c000 120K /usr/local/jdk1.7/jre/lib/amd64/libzip.so
0x00007f2b61537000 64K /lib64/libnss_files-2.12.so
0x00007f2b61755000 214K /usr/local/jdk1.7/jre/lib/amd64/libjava.so
0x00007f2b61980000 63K /usr/local/jdk1.7/jre/lib/amd64/libverify.so
0x00007f2b61c8f000 14786K/usr/local/jdk1.7/jre/lib/amd64/server/libjvm.so
0x00007f2b62af8000 103K /usr/local/jdk1.7/jre/lib/amd64/jli/libjli.so
[root@node10 bin]#
jconsole:可視化jvm管理控制檯
在使用jconsole之前,有個要注意的地方就是一定要設置好主機名和ip地址的映射關係,即要在host中添加一條記錄
例如,我這裏爲:
#vim /etc/hosts
172.16.1.20 node10.lxm.com
示例:
#jconsole
在上面出現的窗口中,選擇一個正在運行的jvm實例,然後點擊connect按鈕即可。
但是在jdk1.7中可能會有一個ssl連接的提示,且默認是ssl連接,連接失敗,如下所示:
由上圖所示提示連接失敗,此時選擇:insecure connection,則會使用非ssl的方式進行重新連接,此時連接成功:
從上面的監控窗口中,可以看到很多jvm的運行狀態,具體有哪些就不一一介紹了,自己分析下很容易瞭解。
遠程連接jvm實例:
上面的連接是連接本地的jvm實例,如果想遠程監控jvm實例怎麼辦呢,只要進行下面的設置。
1)在服務器端設置jvm實例參數:
例如我這裏的jvm服務器爲:172.16.1.20
#vim /usr/local/tomcat7/bin/catalina.sh
在#OS specific support的下方加一行內容:
JAVA_OPTS="-Dcom.sun.management.jmxremote.port=1090 "
注意:這裏設置的是jvm實例用於遠程連接的端口號,該端口號可以根據自己的需要任意設置,顯然不能和系統上已經有的端口號衝突。
2)監控端設置
#vim /etc/hosts
添加一行內容:
172.16.1.20 node10.lxm.com(被監控jvm實例的主機名)
#jconsole
如上圖所示,在remote process輸入遠程的主機名和端口號即可,點擊connect
提示安全的連接失敗,點擊insecure connection:
從上面的信息可見,連接成功。
jvisualvm:可視化虛擬控制檯
#jvisualvm
好,到此爲止,tomcat專題二就介紹到這裏。這一節主要聊一下jdk的安裝已經tomcat的安裝及基本使用,包括jvm虛擬機的一些監控。下一節將詳細聊一聊,tomcat自身的體系結構以及主要配置文件的解析。