一、Tomcat简介:
孙创造了第一个Servlet容器,即JavaWebServer,但只演示了Servlet的相应功能,所以性能不稳定。与此同时,apache基金会(ASF)创建了JServ项目,这是一个可以与apache集成的servlet容器。1999年,Sun公司将捐赠给ASF,于是两个项目合二为一,也就是今天Tomcat的前身。tomcat第一个版本是Tomcat3.x系列,而2001年发布的Tomcat4.0是在之前版本的基础上重新设计和实现的,其代码项目命名为Catalina。
Tomcatserver是一款免费开源的Web应用服务器,属于轻量级应用服务器。广泛应用于中小型系统和并发用户不多的场合。它是开发和调试JSP程序的首选。
版本介绍:现在版本更新到了ApacheTomcat8.x,但是ApacheTomcat7.x是目前开发的重点。ApacheTomcat7.x,基于Tomcat6.0.x的优势,支持Servlet3.0,JSP2.2,EL2.2。
其他改进的列表如下:
web应用程序的内存溢出检测和预防
增强虚拟机管理程序和服务器虚拟机管理程序的安全性。
一般CSRF保护
支持在web应用程序中直接引用外部内容
重构(连接器、生命周期)以及对众多核心代码的全面梳理。
二。tomcat *** 作模式介绍:
Tomcat连接器(TomcatConnector)有bio、nio、apr三种工作模式,那么这三种工作模式有什么区别呢?如何修改Tomcat连接器的运行方式来提高Tomcat的运行性能?
生物模式:
Bio(blockingI/O)顾名思义就是阻塞式I/O *** 作,也就是说Tomcat使用的是传统的JavaI/O *** 作(即java.io包及其子包)。默认情况下,Tomcat以bio模式运行。遗憾的是,一般来说,bio模式是三种运行模式中性能最低的。我们可以通过Tomcat管理器检查服务器的当前状态。
[root@web conf]# cd /data/node1/conf/tomcat-users.xml [root@web conf]# vim tomcat-users.xml #添加进去两行代码,也就是新创建一个账号和密码。 <role rolename="manager-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui"/> 添加之后,然后保存退出此文件。想让配置文件生效,需要重启下tomcat。 [root@web conf]# /data/node1/bin/shutdown.sh [root@web conf]# /data/node1/bin/startup.sh单击服务器状态查看以下状态:
Nio模式:
Nio(newI/O)是JavaSE1.4及其以后版本(即java.nio包及其子包)提供的一种新的I/O *** 作模式。Javanio是基于buffer的JavaAPI,可以提供非阻塞的I/O *** 作,所以nio也被看作是非阻塞I/O的简称,它比传统的I/O *** 作(bio)有更好的并发性能。要让Tomcat在nio模式下运行也很简单,我们只需要在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" />此时,我们可以在TomcatManager中看到,当前服务器状态页的HTTP协议的连接器运行模式已经从http-bio-8080变成了http-nio-8080。
Apr模式:
APR(ApachePortableRuntime/ApachePortableRuntime)是ApacheHTTPserver的支持库。你可以简单理解为Tomcat会以JNI的形式调用ApacheHTTPserver的核心动态链接库来处理文件读取或者网络传输,从而大大提高Tomcat处理静态文件的性能。Tomcatapr也是在Tomcat上运行高并发应用程序的首选模式。如果我们的Tomcat没有在apr模式下运行,当启动Tomcat时,我们可以在日志信息中看到如下信息:
org.Apache.catalina.core.aprlivecyclelistenerinit
信息:在java.library.path:XXX/XXX(以下是路径信息)上找不到基于APR的ApacheTomcat本地库,该库允许在生产环境中获得最佳性能
Tomcatapr运行模式的配置是三种运行模式中比较麻烦的一种。根据官方文档,Tomcatapr需要以下三个组件的支持:
四月图书馆
Tomcat使用的JNI包装器(libtcnative)[简单来说,如果是在Windows *** 作系统上,就是一个名为tcnative-1.dll的动态链接库文件]
OpenSSL库[OpenSSL库]
另外,和配置nio运行模式一样,还需要将对应连接器节点的协议属性值改为org.Apache.coyote.http11.http11arprotocol,不过上述繁琐的 *** 作在Tomcat7.0.30之前只需要这样配置即可。从Tomcat7.0.30开始,Tomcat自带了tcnative-1.dll等文件,默认运行在Tomcatapr模式,我们只需要下载最新版本的Tomcat就可以直接使用了。
默认情况下,它是生物模式。请介绍一下如何改成apr模式:
[root@web]#yum install -y apr apr-util apr-devel [root@web]# cd /data/node1/bin [root@web bin]# tar -zxvf tomcat-native.tar.gz [root@web bin]# cd tomcat-native-1.1.32-src/jni/native/ [root@web native]# ./configure --with-apr=/usr/bin/apr-1-config --with-ssl=/usr/include/openssl/ [root@web native]# make && make installtomcat和apr库的集成需要修改shell脚本文件catalina.sh
[root@web node1]# vim /data/node1/bin/catalina.sh +99 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 -XX:+DisableExplicitGC" cygwin=false darwin=false CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib" os400=false退出并重新启动tomcat。请参阅tomcat启动输出日志信息:
信息: Deploying web application directory /data/node1/webapps/host-manager 七月 10, 2015 6:42:19 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deployment of web application directory /data/node1/webapps/host-manager has finished in 156 ms 七月 10, 2015 6:42:19 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deploying web application directory /data/node1/webapps/examples 七月 10, 2015 6:42:21 下午 org.apache.catalina.startup.HostConfig deployDirectory 信息: Deployment of web application directory /data/node1/webapps/examples has finished in 1,490 ms 七月 10, 2015 6:42:21 下午 org.apache.coyote.AbstractProtocol start 信息: Starting ProtocolHandler ["http-apr-8080"] 七月 10, 2015 6:42:22 下午 org.apache.catalina.startup.Catalina start 信息: Server startup in 25191 ms 出现了["http-apr-8080"]字段,说明现在tomcat已经是apr模式。三。下面是构建tomcat服务器所需的jdk环境变量:
Tomcat7.x服务器内置,请参考:http://taokey.blog.51cto.com/4633273/1615551.
jdk环境变量详解: JAVA_HOME=/data/jdk1.7.0_71 #JAVA_HOME环境变量,它是指向jdk的安装目录的绝对路径,当JDK路径改变的时候,仅需更改JAVA_HOME的变量值即可。 JRE_HOME=/data/jdk1.7.0_71/jre #GRE_HOME环境变量,它是指向jre的安装目录的绝对路径。 PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin # PATH环境变量。作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把 jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好 PATH变量后,就可以在任何目录下执行javac/java等工具了。 CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib #CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们 需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。 export JAVA_HOME JRE_HOME PATH CLASSPATH export PATH=$PATH:JAVA_HOME/bin export JAVA_HOME第四,Tomcat的安全和性能优化。
默认情况下,Server.xml包含以下行:
<服务器端口="8005"shutdown="SHUTDOWN">
这允许任何人远程登录到服务器的端口8005,键入“SHUTDOWN”并按enter键,服务器将立即关闭。从安全的角度来说,我们需要把这个关机命令改成一个别人不容易猜到的字符串,同时也可以改变端口。
2).8009端口是tomcat和apache的mod_proxy_AJP和mod_JK之间的通讯端口,所以不用的时候是关闭的。在tomcat的配置文件server.xml中注释掉这一段:
<!-
<连接器端口="8009"协议="AJP/1.3"重定向端口="8443"/>
->;
2.tomcat性能优化:
1).1.优化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"
服务器:一定要做第一个参数,在多个CPU中有不错的表现。
-Xms:初始堆大小,使用的最小内存,当cpu性能较高时,该值应设置得较大。
-xmx:最大Java堆,使用的最大内存。
以上两个值是分配的JVM的最小和最大内存,取决于硬件物理内存的大小。建议将它们设置为物理内存的一半。
-XX:PermSize:设置内存的永久存储区域。
-XX:MaxPermSize:设置最大内存的永久存储区域。
-XX:MaxNewSize:
-Xss15120这使得JBoss每增加一个线程就要立即消耗15M内存,而最优值应该是128K,默认值好像是512k。
+XX:AggressiveHeap会让Xms失去意义。这个参数让jvm忽略Xmx参数,疯狂的吃掉一个G的物理内存,然后吃掉一个G的swap。
-Xss:每个线程的堆栈大小
-verbose:gc实际垃圾收集信息
-Xloggc:gc.log指定垃圾收集日志文件。
-xmn:年轻一代的堆大小,一般设置为Xmx的3/4。
-XX:+UseParNewGC:缩短未成年人收集的时间。
-XX:+UseConcMarkSweepGC:缩短大集时间。
下面是一些关于JVM内存配置的推荐文章。你可以阅读它们:
http://blog.chinaunix.net/uid-743704-id-2681326.html
http://www.open-open.com/lib/view/open1324736648468.html
***Linux/tomcatnacunxiangjie__zhuanzaibufennarong_523821_1373809710.html
2).在tomcatserver中优化server.xml配置文件,在配置文件中找到Connectorport="8080",然后进行如下修改:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="20000" redirectPort="8443" enableLookups="false" acceptCount="50" minProcessors="20" maxProcessors="200" maxThreads="400" minSpareThreads="25" maxSpareThreads="75" URIEncoding="utf-8" />参数的详细说明:
connectiontimeout:网络连接超时,默认值为20000,单位:毫秒。将其设置为0意味着它永远不会超时。这样的设置有隐患。通常可以设置为30000毫秒。(该系统与后台系统接口超时时间较长,因此使用量设置为60000)
RedirectPort:如果连接器支持非SSL请求,Catalina将在收到SSL传输请求后自动将请求重定向到此处指定的端口号。
EnableLookups:是否反向查找域名;默认值为true。为了提高处理能力,应该将其设置为false。
AcceptCount:指定当处理请求的所有可用线程都被使用时,可以放入处理队列的请求数,超过此数的请求将不会被处理。默认值为10。
MinProcessors:空闲连接线程的最小数量空,用于提高系统的处理性能。默认值为10。
MaxProcessors:连接线程的最大数量,即并发处理的请求的最大数量,默认值为75。
MaxThreads:Tomcat使用线程来处理它收到的每个请求。该值表示Tomcat可以创建的最大线程数。默认值为200。可以根据机器的周期性能和内存大小进行调整,一般可以是400-500。最高可以在800左右。
SpareThreads:初始化Tomcat时创建的线程数。默认值为4。
MaxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再需要的套接字线程。默认值为50。
URIEncoding:URI编码是一种用于解码字节字符的格式。可以用中文显示,可以用UTF-8。
3).编写tomcat重启脚本,添加启动和自启动。
more /etc/init.d/tomcat #!/bin/bash # chkconfig: - 96 14 # description: Tht Apache Tomcat Servlet/JSP container. # export JAVA_HOME=/data/jdk1.7.0_71 export CATALINA_HOME=/data/tomcat exec /data/tomcat/bin/catalina.sh $* chmod o+x /etc/init.d/tomcat chkconfig --add tomcat chkconfig node1 on chkconfig --list node1 node1 0:off 1:off 2:on 3:on 4:on 5:on 6:off第五,Tomcat日志分段。
1.下载并安装cronolog软件。
cd /taokey/tools/ tar -zxf cronolog-1.6.2.tar.gz cd cronolog-1.6.2/ ./configure make && make install which cronolog /usr/local/sbin/cronolog2.修改tomcat的catalina.sh文件。
cd /data/node1/bin/ vim catalina.sh +373 touch "$CATALINA_OUT"找到这一行,注释掉,应该在373行附近,
#触摸"$CATALINA_OUT"
然后找到这两条线,
org.apache.catalina.startup.Bootstrap "$@" start \ >> "$CATALINA_OUT" 2>&1 "&"修改为:
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &3.重新启动tomcat服务并查看生成的日志。
/etc/init.d/tomcat stop ps -ef | grep java /etc/init.d/tomcat start tail -f /data/node1/logs/catalina.2015-10-26.out Oct 26, 2015 2:19:47 PM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deploying web application directory /data/node1 Oct 26, 2015 2:19:47 PM org.apache.catalina.startup.HostConfig deployDirectory INFO: Deployment of web application directory /data/node1 has finished in 143 ms Oct 26, 2015 2:19:47 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["http-bio-8080"] Oct 26, 2015 2:19:47 PM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["ajp-bio-8009"] Oct 26, 2015 2:19:47 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 1700 ms这样,catalina.out的日志就是按天划分的。今天是10月26日,卡特琳娜。2015年10月26日。出,10月27日。
Catalina.2015-10-27.out,这样查找日志方便快捷。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)