10linux基础服务-tomcat
tomcat简介
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和Java Server Page(JSP)的支持,Tomcat本身也是一个HTTP服务器可以单独使用,Apache是一个以C语言编写的HTTP服务器。Tomcat主要用来解析JSP语言,目前最新版本为9.0
tomcat企业安装配置
JDK (Java Development Kit) ,是 Java 语言的软件开发工具包(SDK)),JDK是整个java开发的核心,它包含了JAVA运行时环境Java Runtime Enviromental,JRE)和 JAVA工具,其中JRE包括(JVM+Java系统类和库);
JAVA虚拟机(Java Virtual Mechinal,JVM),JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JAVA开发人员通过JDK(调用JAVA API)工具包,开发了JAVA程序(JAVA源码文件)之后,通过JDK中的编译程序(JAVAC)将java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
jdk-6u18-linux-x64-rpm.bin,bin文件安装跟sh文件方法一样,sh ./ jdk-6u18-linux-x64-rpm.bin,回车即可,默认安装到/usr/java/jdk1.6.0_18目录下。
配置java环境变量,vi /etc/profile 添加如下语句:
export JAVA_HOME=/usr/java/jdk1.6.0_18 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
source /etc/profile //使环境变量立刻生效。
java -version //查看java版本,显示版本为1.6.0_18,证明安装成功。
官网下载Tomcat相应版本,下载版本apache-tomcat-6.0.30.tar.gz,操作如下:
tar -xzf apache-tomcat-6.0.30.tar.gz ;mv apache-tomcat-6.0.30 /usr/local/tomcat即可。 启动tomcat,命令为:/usr/local/tomcat/bin/startup.sh 查看ps -ef |grep tomcat 进程及端口是否存在
tomcat目录详解
tomcat |---bin Tomcat:存放启动和关闭tomcat脚本; |---confTomcat:存放不同的配置文件(server.xml和web.xml); |---doc:存放Tomcat文档; |---lib/japser/common:存放Tomcat运行需要的库文件(JARS); |---logs:存放Tomcat执行时的LOG文件; |---src:存放Tomcat的源代码; |---webapps:Tomcat的主要Web发布目录(包括应用程序示例); |---work:存放jsp编译后产生的class文件;
tomcat配置文件详解
server.xml配置:
server: port 指定一个端口,这个端口负责监听关闭tomcat的请求
shutdown 指定向端口发送的命令字符串
service: name 指定service的名字
Connector (表示客户端和service之间的连接):
port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
minProcessors 服务器启动时创建的处理请求的线程数
maxProcessors 最大可以创建的处理请求的线程数
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查 询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理 队列中的请求数,超过这个数的请求将不予处理
connectionTimeout 指定超时的时间数(以毫秒为单位)
Engine(表示指定service中的请求处理机,接收和处理来自Connector的请求):
defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的 Context (表示一个web应用程序):
docBase 应用程序的路径或者是WAR文件存放的路径 path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/ reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序
host (表示一个虚拟主机):
name 指定主机名
appBase 应用程序基本目录,即存放应用程序的目录
unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接 从WAR文件中运行应用程序 ;
Logger (表示日志,调试和错误信息):
className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
prefix 指定log文件的前缀
suffix 指定log文件的后缀
timestamp 如果为true,则log文件名中要加入时间,如下 Realm (表示存放用户名,密码及role的数据库):
className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口 Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样):
className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve类可以记录应用程序的访问信息
directory(指定log文件存放的位置):
pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多。
tomcat连接器选择
Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式 bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是传统的Java I/O操作(即Java.io包及其子包)。 默认的模式,性能最差,没有经过任何优化处理和支持。 nio(non-blocking I/O),java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API。拥有比传统I/O操作(bio)更好的并发运行性能。 要让Tomcat以nio模式来运行,修改配置文件:tomcat/conf/server.xml vim tomcat/conf/server.xml 修改以下内容: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 修改protocol的值为org.apache.coyote.http11.Http11NioProtocol <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" /> apr(Apache Portable Runtime/Apache可移植运行时库),Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。从操作系统级别来解决异步的IO问题,大幅度的提高性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。 要让Tomcat以apr模式来运行,必须安装apr和native 安装apr: yum -y install apr apr-devel 安装native: cd /usr/local/tomcat/bin/ tar xzfv tomcat-native.tar.gz cd tomcat-native-1.1.33-src/jni/native/ ./configure --with-apr=/usr/bin/apr-1-config make && make install 整合Tomcat apr: 设置环境变量 方法一:在/bin/catalina.sh中增加1行: (在echo “Using CATALINA_BASE: $CATALINA_BASE”的上一行添加) CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib" 方法二:在/etc/profile中加入: export CATALINA_OPTS=-Djava.library.path=/usr/local/apr/lib source /etc/profile 修改配置文件:tomcat/conf/server.xml vim tomcat/conf/server.xml 修改以下内容: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 修改protocol的值为org.apache.coyote.http11.Http11NioProtocol <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="20000" redirectPort="8443" />
tomcat性能优化
线上环境使用默认tomcat配置文件,性能很一般,为了满足大量用户的访问,需要对tomcat进行参数性能优化,具体优化的地方如下:
Ø Linux内核的优化
Ø 服务器资源配置的优化
Ø Tomcat参数优化
Ø 配置负载集群优化
这里着重讲解tomcat参数的优化: server.xml文件,关闭DNS查询、配置最大并发等参数。
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat启动的线程数达到最大时,接受排队的请求个数,默认值为100
当然这些值都不是越大越好,需要根据实际情况来设定。可以基于测试的基础上来不断的调优分析。
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="443"
maxThreads="5000"
minSpareThreads="20"
acceptCount="10000"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8" />
tomcat多实例
配置多个tomcat实例,方法也很简单,只需要在服务器上cp多个tomcat,然后修改三个端口和发布目录即可,然后分别启动即可。
为了提升整个网站的性能,还需要在tomcat前面架设Nginx web反向代理服务器,用以提高用户高速访问