您的位置:首页 > 运维架构 > Tomcat

apache+tomcat安装配置

2013-06-05 14:42 363 查看
一、tomcat环境结构/原理
JDK(java sdk) java的开发工具包
--|JAVA基础API: .java源程序编译成.class字节码文件
--|JAVA编译器(jre):jre调用JVM将.class字节码文件编译成机器可识别执行的程序(执行java程序)
--|JVM:java虚拟机,有独立的控制器,内存域…..
--|大量的java工具
JVM堆内存(java对象的活动空间)
--|永久存储区:存储JVM自己的类和方法对象
--|新生区(JVM生成的所在新对象放在新生区中,类的诞生、成长、消亡的区域)
----|伊甸区Eden space:类被new出来
----|幸存区Survivor space
------|survivor 0区
------|Survivor 1区
--|老年区:一旦对象经历了一定数量和垃圾收集循环后,便进入此区域。
JVM垃圾回收过程:
当伊甸园的空间用完时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收,将伊甸园区中的不再被其他对象所引用的对象进行销毁。然后将伊甸园中的剩余对象移动到幸存0区。若幸存0区也满了,再对该区进行垃圾回收,然后移动到1区。那如果1区也满了呢?再移动到老年区。
原理:
1. JVM垃圾回收机制与GC性能调优
垃圾回收主要是对新生区与老年区块内存进行回收。
1)GC流程:
[older generation][survivor 1][survivor 2][eden]
Young generation=eden + survivor
当Eden区满触发young GCyoung GC去掉一部分没用的object,把老的还被引用的object发到survivor里,等下几次GC后,survivor再放到old里面当old满触发full GC(很消耗内存),把old,young里大部分垃圾回收掉,这个时候用户线和都会被block.
2)性能调优:
JVM堆的大小决定了GC的运行时间。如果JVM堆的大小超过一定的限度,那么GC的运行时间会很长。
对象生存的时间越长,GC需要的回收时间也越长,影响了回收速度。
大多数对象都是短命的,所以,最好能让这些对象的生存期在GC的一次运行周期内
应用程序中,建立与释放对象的速度决定了垃圾收集的频率
如果GC一次运行周期超过3-5秒,这会很影响应用程序的运行,如果可以,应该减少JVM堆的大小了。
前辈经验之谈:通常情况下,JVM堆的大小应为物理内存的80%。
2. Apache与tomcat的整合
Apache只支持静态网页,tomcat是支持java程序的容器,本身可以做web server但是在处理静态页面时没有apache迅速。
Apache2.2版本后,出现的两种连接器http-proxy和proxy-ajp模块,apache的proxy(代理)模块可以实现双向代理,连接器的实现原理:
http-proxy模块:只需打开tomcat的http功能,然后用apache的proxy代理功能将动态请求交给tomcat处理,而静态数据交给apache自身就可以了
proxy-ajp模块:是专门为tomcat整合所开发的,通过ajp协议专门代理对tomcat的请求.
二、环境安装(apache+tomcat+jdk)
源码安装包统一存放路径:/usr/local/src/…
必备安装包:
apche: http://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.2.24.tar.gz
TOMCAT: http://mirrors.cnnic.cn/apache/tomcat/tomcat-6/v6.0.36/bin/apache-tomcat-6.0.36.tar.gz
JDK: http://download.chinaunix.net/down.php?id=33932&ResourceID=61&site=1
按需可选包:
memcache:
https://github.com/downloads/libevent/libevent/libevent-2.0.13-stable.tar.gz
http://memcached.org/ memcached-1.4.15.tar.gz
apache-ant:
http://archive.apache.org/dist/ant/binaries/apache-ant-1.6.5-bin.tar.gz
1、apache安装:略
2、jdk,tomcat包安装直接解压,解压目录路径添加至环境变量中即可.
# cd /usr/local/src/
# chmod +x jdk-6u26-dlj-linux-amd64.bin
# ./jdk-6u26-dlj-linux-amd64.bin
# cd jdk1.6.0_26/
# mkdir -p /usr/local/java
# mv jdk1.6.0_26 ../java/
# vi /etc/profile 添加环境变量
#add java enviroment varaible
export JAVA_HOME=/usr/local/java/jdk1.6.0_26
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
# source /etc/profile
# java --version
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
如果出错解决如下:
# cd jdk1.6.0_26/lib/
# unpack200 tools.pack tools.jar
# cd ../jre/lib/
# unpack200 rt.pack rt.jar
# java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
查看验证:
# echo $JAVA_HOME
/usr/local/java/jdk1.6.0_26
# echo $PATH
/usr/local/java/jdk1.6.0_26/bin:/usr/local/java/jdk1.6.0_26/jre/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
#tar -zxvf apache-tomcat-6.0.36.tar.gz
#mv apache-tomcat-6.0.36 /usr/local/tomcat
[root@localhost tomcat]# ./bin/startup.sh 直接执行tomcat启动脚本
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jdk1.6.0_26
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar

问题总结:
Could not find the main class: nagement.jmxremote.ssl=false.
环境变量问题,定义类,lib下可能没取到:
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$TOMCAT_HOME/bin:$ANT_HOME/bin:$JAVA_HOME/lib
三、配置文件
apache与tomcat整合
1、apache配置说明: httpd.conf
apache与tomcat整合通过apache的proxy模块, Apache通过ajp协议与tomcat进行通信,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口。
ProxyPreserveHost on
ProxyPass /sso balancer://sso lbmethod=bytraffic stickysession=jsessionid|JSESSIONID
<proxy balancer://sso/>
BalancerMember ajp://127.0.0.1:8009/sso loadfactor=1
</proxy>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
2、tomcat配置说明: /usr/local/tomcat/conf/server.xml
#连接器所监听的端口,http协议接受用户的请求及相关参数
<Connector port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="800" minSpareThreads="25" maxSpareThreads="200" enableLookups="false" redirectPort="8443" acceptCount="10000" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
#连接器所监听的端口, AJP协议只可以接受前端apache服务器的请求
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" minSpareThreads="25" maxSpareThreads="200" acceptCount="10000" enableLookups="false" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
# Tomcat 虚拟目录的设置
<Context path="/sso" reloadable="true" docBase="/var/www/sso" allowLinking="true"/>
3、添加tomcat管理用户
<role rolename="manager"/>
<role rolename="tomcat"/>
<user username="xxx" password="xxx" roles="tomcat,manager"/>
</tomcat-users>
4、测试
直接访问:http://iphttp://ip/sso测试

========================proxypass说明=====================================
##################### httpd.conf ######################
Apache Module mod_proxy_balancer
官网样例:
Before we dive into the technical details, here's an example of how you might use mod_proxy_balancer to provide load balancing between two back-end servers:
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.50:80
BalancerMember http://192.168.1.51:80
</Proxy>
ProxyPass /test balancer://mycluster
-------------------------------------------
实例:
ProxyPass /center balancer://center lbmethod=bytraffic stickysession=jsessionid|JSESSIONID
<proxy balancer://center/>
BalancerMember ajp://127.0.0.1:8009/center loadfactor=1
</proxy>
ProxyPass /service balancer://service lbmethod=bytraffic stickysession=jsessionid|JSESSIONID
<proxy balancer://service/>
BalancerMember ajp://127.0.0.1:8009/service loadfactor=1
</proxy>
ProxyPass /ps balancer://ps lbmethod=bytraffic stickysession=jsessionid|JSESSIONID
<proxy balancer://ps/>
BalancerMember ajp://127.0.0.1:8009/ps loadfactor=1
</proxy>
将对http://localhost/ps/***的本地请求内部转换成到ajp://127.0.0.1:8009/ps/***
如果代理的指令类型以balancer://开头那么会创建一个虚拟工作单元,并不直接和后端服务器通讯。它负责对一些“真正”的工作单元进行管理。
这种情况下可以给虚拟工作单元添加一系列额外参数。
如下:
参数 默认值 描述
lbmethod byrequests 选择均衡器的负载均衡方式。可以是byrequests,进行加权请求计数,或者是bytraffic,进行加权流量字节计数均衡。默认按请求数。
stickysession 均衡器粘连会话名称。该值常常会被设置为类似JSESSIONID或者PHPSESSIONID之类的值,他依赖于支持会话的后端应用服务器。
如果后端服务器使用不同的cookie名称或者URL编码的ID(像servlet容器),使用|来分开他们。第一个部分针对cookie,第二个针对路径。
loadfactor 1 工作单元负载系数。用于BalancerMember。它是一个1到100之间的数字,用于定义应用于该工作单元的正规化权重负载
########################### tomcat ########################
-------------------------------------------
conf/server.xml
<Connector port="8080" protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="800" minSpareThreads="25" maxSpareThreads="200" enableLookups="false" redirectPort="8443" acceptCount="10000" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
<Connector port="8009" protocol="AJP/1.3" minSpareThreads="25" maxSpareThreads="200" acceptCount="10000" enableLookups="false" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
<Context path="/center" reloadable="true" docBase="/applications/center" allowLinking="true"/>
<Context path="/ps" reloadable="true" docBase="/applications/ps" allowLinking="true"/>
参数说明:
path:指定访问该Web应用的URL入口
docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径
reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,
如果监测到有class文件被更新的,服务器会自动重新加载Web应用

本文出自 “E人空间” 博客,请务必保留此出处http://iceeggplant.blog.51cto.com/1446843/1216623
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: