Linux环境下Tomcat的搭建

请关注DeveloperQ公众号

DeveloperQ公众号

Tomcat简介


Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 

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

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

  • Linux下Tomcat的安装配置

一.下载安装对应的jdk,并配置Java环境

官方下载地址:

http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u26-download-400750.html

下载将jdk加压后放到/usr/local目录下:

[root@master ~]#chmod 755 jdk-6u5-linux-x64.bin

[root@master ~]# ./jdk-6u5-linux-x64.bin

[root@master ~]#mv jdk1.6.0_05 /usr/local

建立/usr/local/下的jdk软连接方便以后版本升级 :

 [root@master ~]# ln -s /usr/local/jdk1.6.0_05/ /usr/local/jdk

>配置环境变量:

在 /etc/profile 中加入以下内容:

JAVA_HOME=/usr/local/jdk1.6.0_05

JAVA_BIN=/usr/local/jdk1.6.0_05/bin

PATH=$PATH:$JAVA_BIN

CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export JAVA_HOME JAVA_BIN PATH CLASSPATH

>保存退出

[root@master ~]source /etc/profile

>查看java环境变量是否生效

[root@master ~]# java -version

Java version "1.6.0_05"

Java(TM) SE Runtime Environment (build 1.6.0_05-b13)

Java HotSpot(TM) 64-Bit Server VM (build 10.0-b19, mixed mode)

二.下载安装tomcathttp://tomcat.apache.org/

[root@master ~]# unzip apache-tomcat-6.0.30.zip

[root@master ~]# mv apache-tomcat-6.0.30/ /usr/local/

[root@master ~]cd /usr/local/

[root@master local]# ln -s /usr/local/apache-tomcat-6.0.30/ /usr/local/tomcat

[root@master local]# cd tomcat/bin/

[root@master bin]#ls

[root@master bin]#vim catalina.sh //创建一个快捷启动脚本

添加以下内容:

CATALINA_HOME=/usr/local/apache-tomcat-6.0.30/

[root@master local]#chmod +x *.sh

三.启动tomcat服务器

[root@master tomcat]# /usr/local/tomcat /bin/catalina.sh start

Using CATALINA_BASE:   /usr/local/apache-tomcat-6.0.30/

Using CATALINA_HOME:   /usr/local/apache-tomcat-6.0.30/

Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.30//temp

Using JRE_HOME:        /usr/local/jdk1.6.0_05

Using CLASSPATH:       /usr/local/apache-tomcat-6.0.30//bin/bootstrap.jar

[root@master logs]# cd /usr/local/tomcat/logs/

[root@master logs]# tail -f catalina.out

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

        at java.lang.reflect.Method.invoke(Method.java:597)

        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)

        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

Jul 4, 2011 11:06:57 AM org.apache.coyote.http11.Http11Protocol pause

INFO: Pausing Coyote HTTP/1.1 on http-8080

Jul 4, 2011 11:06:58 AM org.apache.catalina.core.StandardService stop

INFO: Stopping service Catalina

Jul 4, 2011 11:06:58 AM org.apache.coyote.http11.Http11Protocol destroy

INFO: Stopping Coyote HTTP/1.1 on http-8080

四.在浏览器中输入

http://localhost:8080/(如果不是本机,则输入对应的ip地址)

测试出现tomcat页面则测试成功

ps:需要说明的是tomcat的默认测试页面是放在webapps下面,这个其实是在server.xml文件中配置的,如下所示:

<Host name="localhost"  appBase="webapps"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">

[root@SOR_SYS apache-tomcat-6.0.30]# ls

LICENSE  NOTICE  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  temp  webapps  work

        1)webapps文件夹主要用于web应用程序部署,比如你可以把你的应用程序包,如war文件拷到该目录下,容器会自动部署。

  2)conf文件夹下主要是放置tomcat的服务器的相关配置文件

Tomcat目录介绍

#移动到tomcat目录 [root@coconut conf]# cd /usr/local/tomcat [root@coconut tomcat]# tree -L 1

├── bin                         #→用以启动、关闭Tomcat或者其它功能的脚本(.bat文件和.sh文件)├── conf                       #→用以配置Tomcat的XML及DTD文件├── lib                        #→存放web应用能访问的JAR包├── LICENSE ├── logs                       #→Catalina和其它Web应用程序的日志文件├── NOTICE ├── RELEASE-NOTES ├── RUNNING.txt ├── temp                       # →临时文件├── webapps                     #→Web应用程序根目录└── work                        #→用以产生有JSP编译出的Servlet的.java和.class文件# 启动Tomcat /usr/local/tomcat/bin/startup.sh /usr/local/tomca/bin/shutdown.sh /usr/local/tomca/logs/catalina.out             #实时日志/usr/local/tomca/logs/localhost.`date +%F`.log   #tomcat启动记录日志

Tomcat配置文件

[root@coconut conf]# cd /usr/local/tomcat [root@linuxprobe conf]# ll -h total 212K drwxr-xr-x 3 root root 4.0K Apr 26 10:48 Catalina -rw------- 1 root root  12K Feb  9 04:29 catalina.policy -rw------- 1 root root 6.2K Feb  9 04:29 catalina.properties -rw------- 1 root root 1.4K Feb  9 04:29 context.xml -rw------- 1 root root 3.3K Feb  9 04:29 logging.properties -rw------- 1 root root 6.5K Apr 26 10:46 server.xml            #主配置文件      -rw------- 1 root root 1.5K Feb  9 04:29 tomcat-users.xml     #tomcat管理用户配置文件-rw------- 1 root root 165K Feb  9 04:29 web.xml

Tomcat主配置文件Server.xml详解

  • server.xml组件类别

 顶级组件:位于整个配置的顶层,如server。 

容器类组件:可以包含其它组件的组件,如service、engine、host、context。 

连接器组件:连接用户请求至tomcat,如connector。 

被嵌套类组件:位于一个容器当中,不能包含其他组件,如Valve、logger.

<server>     <service>     <connector />     <engine>     <host>     <context></context>     </host>     <host>     <context></context>     </host>     </engine>     </service> </server>

  • 组件详解

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连接至数据库中查找认证用户。

  • web站点部署

上线的代码有两种方式,第一种方式是直接将程序目录放在webapps目录下面,这种方式大家已

经明白了,就不多说了。第二种方式是使用开发工具将程序打包成war包,然后上传到webapps

目录下面。

Tomcat多实例及集群架构

  • 复制Tomcat目录

cp -a apache-tomcat-7.0.69 tomcat_8081

cp -a apache-tomcat-7.0.69 tomcat_8082

cp -a apache-tomcat-7.0.69 tomcat_8083

  • 修改每个tomcat配置文件server.xml

<Server port="8006" shutdown="SHUTDOWN">

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

<Server port="8007" shutdown="SHUTDOWN">      <Connector port="8082" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" />

<Server port="8008" shutdown="SHUTDOWN">     <Connector port="8082" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" /> <!-- <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> --> #此行注释

  • 启动多实例

for i in {8081,8082,8083};do /data/tomcats/tomcat_$i/bin/startup.sh;done netstat -tunlp|grep java

Tomcat集群

  • 使用nginx+Tomcat反向代理集群

[root@linuxprobe ~]# vim /opt/nginx/conf/nginx.conf     upstream web_pools {         server 127.0.0.1:8081;         server 127.0.0.1:8082;         }     server {         listen       80;         server_name  localhost;       location / {             root   html;             index  index.jsp index.html index.htm;           proxy_pass http://web_pools;         }     }

Tomcat安全优化和性能优化

  • 安全优化

降权启动、telnet管理端口保护、ajp连接端口保护、禁用管理端

  • 性能优化

屏蔽dns查询enableLookups=”false”

<Connector  port="8081" protocol="HTTP/1.1"               connectionTimeout="6000" enableLookups="false" acceptCount="800"               redirectPort="8443" />

  • jvm调优

Tomcat比较消耗内存,内存足够,tomcat运行就快,系统资源有限的情况下,需要进行调优,

提高资源利用率。

优化catalina.sh配置文件。在catalina.sh配置文件中添加以下代码: JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -

Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -

XX:MaxPermSize=512m" server:一定要作为第一个参数,在多个CPU时性能佳 -Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时此值应设的大一些 -Xmx:初始堆内存heap最大值,使用的最大内存 上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的

一半。 -XX:PermSize:设定内存的永久保存区域 -XX:MaxPermSize:设定最大内存的永久保存区域 -XX:MaxNewSize: -Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是

128K,默认值好像是512k. +XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物

理内存,再吃尽一个G的swap。 -Xss:每个线程的Stack大小 -verbose:gc 现实垃圾收集信息 -Xloggc:gc.log 指定垃圾收集日志文件 -Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一 -XX:+UseParNewGC :缩短minor收集的时间 -XX:+UseConcMarkSweepGC :缩短major收集的时间

  • 常规设置:vim catalina.sh

[root@linuxprobe ~]# vim /data/tomcats/tomcat_8081/bin/catalina.sh # OS specific support.  $var _must_ be set to either true or false. JAVA_OPTS="-server -Xms1G -Xmx2G -Xss256K -Djava.awt.headless=true -

Dfile.encoding=utf-8 -XX:PermSize=64M -XX:MaxPermSize=128M"



注:以上内容大部分来自以下两个网站,如若需要查看原文可到以下网址查看

http://blog.csdn.net/wh211212/article/details/53198350

http://blog.csdn.net/zhuying_linux/article/details/6583096/







相关问题推荐