设为首页 收藏本站
查看: 300|回复: 0

[经验分享] (原创)tomcat 的优化配置

[复制链接]

尚未签到

发表于 2017-1-24 10:43:54 | 显示全部楼层 |阅读模式
Tomcat 的优化配置

  一,简化应用:
  webapps与server/wenapps下的应用,减少启动的应用,提高安全性。
   
  
  # 删除webapps下所有文件
  # rm –fr $CATALINA_HOME/webapps/*
  # 删除server/wenapps下所有文件
  # rm –fr $CATALINA_HOME/server/webapps/*
  二,精简server.xml配置文件:
  原始server.xml配置文件

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>

第1部分:<Server>

1,port为Tomcat监听shutdown命令端口.终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令.该属性是必须的.

2,shutdown指定终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置

 

 

第2部分:<Listener>

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

 

 

第3部分:<GlobalNamingResources>定义服务器的全局JNDI资源

其中<Environment>元素,<Resource>元素,<Resourceparams>元素

<Environment>元素的有效属性所如下:



属性



描述



description



环境条目的文字描述(可选)



name



环境条目的名称,相对于java:comp/env context。



override



如果不希望/WEB-INF/web.xml中具有相同名称的<env-entry>覆盖这里指定的值,设为false。缺省值为true。



type



环境条目的Java类名的全称.在/WEB-INF/web.xml中,<env-entry-type>必须是如下的值:java.lang.Boolean, java.lang.Byte, java.lang.Character, java.lang.Double, java.lang.Float, java.lang.Integer, java.lang.Long, java.lang.Short, or java.lang.String.



value



通过JNDI context请求时,返回给应用的参数值。这个值必须转换成type属性定义的Java类型



配置命名的值,这些值作为环境条目资源(Environment Entry Resource),对整个web应用可见。

 

<Resource>元素的有效属性如下:



Attribute



Description



auth



指定是web应用代码本身sign on到对应的resource mananger,还是由container代表web应用sign on到resource manager。该属性的值必须是Application或者Container。如果在web application deployment descriptor中使用<resource-ref>,这个属性是必需的,如果使用<resource-env-ref>,这个属性是可选的。



description



资源的文字描述(可选)



name



资源的名称,相对于java:comp/env context



scope



指定通过这个resource manager得到的连接是否共享。该属性的值必须是Shareable或者Unshareable。缺省情况下,假定连接是共享的。



type



当web应用查找该资源的时候,返回的Java类名的全称。



定义资源的特性;类似于/WEB-INF/web.xml中定义资源的特性

使用JNDI查找<resource-ref>和<resource-env-ref>元素时,这些特性被返回。对同一资源名称,还必须定义资源参数(见下面“资源参数”小节),这些参数用来配置对象工厂(object factory)以及对象工厂的属性。

比如,你可以按照如下方式创建资源定义:

  

<GlobalNamingResources ...>
...
<Resource name="jdbc/EmployeeDB" auth="Container"   
type="javax.sql.DataSource"
description="Employees Database for HR Applications"/>
...
</GlobalNamingResources>

 

 

  

这等价于在/WEB-INF/web.xml中包含如下元素:



 

区别是,前者不需要修改deployment descriptor来定制这个值。

 

 

<Resourceparams>元素的有效属性如下:



属性



描述



name



配置的资源名称,相对于java:comp/env context。这个名称必须与$CATALINA_HOME/conf/server.xml中某个<Resource>元素定义的资源名称匹配,或者在/WEB-INF/web.xml中通过<resource-ref>或者<resource-env-ref>元素应用。



资源参数(Resource Parameters)

资源参数用来配置资源管理器(resource manager,或对象工厂,object factory)。在做JNDI查找时,资源管理器返回查找的对象。在资源可以被访问之前,对<Context>或<DefaultContext>元素的每个<Resource>元素,或者/WEB-INF/web.xml中定义的每个<resource-ref>或<resource-env-ref>元素,都必须定义资源参数。

资源参数是用名称定义的,使用的资源管理器(或者object factory)不同,参数名称的集合也不一样。这些参数名和工厂类的JavaBeans属性相对应。JNDI实现通过调用对应的JavaBeans属性设置函数来配置特定的工厂类,然后通过lookup()调用使得该实例可见。

 

一个JDBC数据源的资源参数可以按照如下方式定义:



 

  

如果你需要为某个特定的资源类型指定工厂内的Java类名,在<ResourceParams>元素中嵌套一个叫做factory的<parameter>条目。 

 

 

第4部分:<Service>

该元素由org.apache.catalina.Service接口定义,它包含一个<Engine>元素,以及一个或多个<Connector>,这些Connector元素共享用同一个Engine元素

 

 

第5部分:<Connector>

每个Service元素只能有一个Engine元素.元素处理在同一个<Service>中所有<Connector>元素接收到的客

户请求.由org.apahce.catalina.Engine接口定义.

由Connector接口定义.<Connector>元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果.

 


<Connector port ="8080" maxThread ="50"
minSpareThreads ="25" maxSpareThread ="75"
enableLookups ="false" redirectPort ="8443"
acceptCount ="100" debug ="0"
connectionTimeout ="20000"
disableUploadTimeout ="true" />
<Connection port ="8009" enableLookups ="false"
redirectPort ="8443" debug ="0" protocol ="AJP/1.3" />

 

 

 第一个Connector元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;第二个Connector元素定义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请求.

Connector元素共用属性

1>    className指定实现Connector接口的类
2>    enableLookups如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.getRemoteHost方法返回客户机主机名.默认值为true
3>    redirectPort指定转发端口.如果当前端口只支持non-SSL请求,在需要安全通信的场命,将把客户请求转发至SSL的redirectPort端口HttpConnector元素的属性
4>    className实现Connector的类
5>    port设定Tcp/IP端口,默认值为8080,如果把8080改成80,则只要输入http://localhost 即可因为TCP/IP的默认端口是80
6>    address如果服务器有二个以上ip地址,此属性可以设定端口监听的ip地址.默认情况下,端口会监听服务器上所有的ip地址
7>    bufferSize设定由端口创建的输入流的缓存大小.默认值为2048byte
8>    protocol设定Http协议,默认值为HTTP/1.1
9>    maxThreads设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200
10>acceptCount设定在监听端口队列的最大客户请求数量,默认值为10.如果队列已满,客户必须等待.
11>connectionTimeout定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间
 

JkConnector的属性

1>    className实现Connector的类
2>    port设定AJP端口号
3>    protocol必须设定为AJP/1.3
 

 

第6部分:<Engine>

< Engine  name ="Catalina"  defaultHost ="localhost"  debug ="0" >

1>    className指定实现Engine接口的类,默认值为StandardEngine
2>    defaultHost指定处理客户的默认主机名,在<Engine>中的<Host>子元素中必须定义这一主机
3>    name定义Engine的名字在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host> 
 

 

<Host>元素
它由Host接口定义.一个Engine元素可以包含多个<Host>元素.每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用.

  < Host  name ="localhost"  debug ="0"  appBase ="webapps"  unpackWARs ="true"  autoDeploy ="true" >

1>    className指定实现Host接口的类.默认值为StandardHost
2>    appBase指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于   <CATALINA_HOME>的相对目录.如果没有此项,默认为<CATALINA_HOME>/webapps
3>    autoDeploy如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用
4>    unpackWARs如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件
5>    alias指定主机别名,可以指定多个别名
6>    deployOnStartup如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用中的server.xml没有相应的<Context>元素,将采用Tomcat默认的Context
7>    name定义虚拟主机的名字在<Host>元素中可以包含如下子元素<Logger>, <Realm>, <Value>, <Context>
 
<Context>元素

它由Context接口定义.是使用最频繁的元素.每个<Context元素代表了运行在虚拟主机上的单个Web应用.

一个<Host>可以包含多个<Context>元素.每个web应用有唯一的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个ServletContext对象.

< Context  path ="/sample"  docBase ="sample"  debug ="0"  reloadbale ="true" >

1>    className指定实现Context的类,默认为StandardContext类
2>    path指定访问Web应用的URL入口,注意/myweb,而不是myweb了事
3>    reloadable如果这个属性设为true, Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改运.如果监视到有class文件被更新,服务器自重新加载Web应用
4>    cookies指定是否通过Cookies来支持Session,默认值为true
5>    useNaming指定是否支持JNDI,默认值为了true在<Context>元素中可以包含如下元素
<Logger>, <Realm>, <Resource>, <ResourceParams>

  三,优化JDK
Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件$CATALINA_HOME/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS='$JAVA_OPTS -Xms[初始化内存大小] -Xmx[可以使用的最大内存]或设置环境变量:export JAVA_OPTS=”$JAVA_OPTS -Xms[初始化内存大小] -Xmx[可以使用的最大内存]”
  一般说来,你应该使用物理内存的 80% 作为堆大小。如果本机上有Apache服务器,可以先折算Apache需要的内存,然后修改堆大小。建议设置为70%;建议设置[[初始化内存大小]等于[可以使用的最大内存],这样可以减少平凡分配堆而降低性能。
  本例使用加入环境变量的方式:
# vi /etc/profile
  加入:export JAVA_OPTS=”$JAVA_OPTS -Xms700 –Xmx700
# source /etc/profile
  实际完整的server.xml文件,等再整理好上传。
 

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332874-1-1.html 上篇帖子: [转]Tomcat日志查看 下篇帖子: how tomcat works 笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表