性能优化的主要方向

性能优化的主要方向,第1张

Tomcat介绍及性能优化

一、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 install

tomcat和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的安全和性能优化。

  • 优化,关闭服务器端口,修改默认端口。

  • 1)。默认的tomcat端口号是8080。还不如修改一下。配置文件位于server.xml中

    默认情况下,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/cronolog

    2.修改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,这样查找日志方便快捷。

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://outofmemory.cn/zz/779993.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-05-04
    下一篇 2022-05-04

    发表评论

    登录后才能评论

    评论列表(0条)

    保存