当前位置: 首页 > news >正文

Tomcat热部署和虚拟目录配置

1.Tomcat如何配置热部署

默认就是 

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

如果要实现IDE修改代码的自动部署,可以使用第三方工具

http://www.zeroturnaround.com/jrebel/

1、解压缩包
2、执行java -jar jrebel-setup.jar
3、会弹出一个安装界面安装
4、在MyEclipse中配置,找到服务器(如tomcat)的配置页面,在tomcat的jdk配置页面的Optional Java VM arguments输入框中加如下参数:
-noverify -javaagent:D:\dev\JRebel\jrebel.jar -Drebel.dirs=D:\dev\apache-tomcat-6.0.20\webapps\nmr
第一个路径是jar包的绝对路径,第二个地址是说想让哪个目录下的类更改后不重启服务。
如果Optional Java VM arguments输入框中有其他参数,用空格隔开。
5、发布项目,就能在控制台看到效果。
类就可以改变之后不用重启tomcat。
目前流行的服务器都支持。详细看官方网站。

 

2.配置WEB项目的虚拟目录

配置之前,web项目文件夹里必须新建个文件夹:WEB-INF,此文件夹里必须有个web.xml的文件。这些都可以直接在tomcat/webapps/ROOT/里复制过来,放到自己的WEB项目中即可。

如果不配置,则需将web项目的文件夹放在tomcat/webapps/下,访问路径为:http://localhost:8080/web项目文件夹名称

如果WEB项目放在其他盘符,则在tomcat目录/conf/文件夹下:编辑server.xml文档,

在文档的末尾处,添加:<Context path="/nala" docBase="e:\www\nala"></Context>,如图所示

其中,path为访问标识,docBase为实际项目的所在目录,这样指定后,重启tomcat,访问:http://localhost:8080/nala,也就成功了。

 

3.tomcat 如何优化?

(1)优化连接配置

这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,修改连接数,关闭客户端dns查询。

参数解释:

URIEncoding=”UTF-8″ :使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译

maxSpareThreads : 如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。

minSpareThreads : 最小备用线程数,tomcat启动时的初始化的线程数。

enableLookups : 这个功效和Apache中的HostnameLookups一样,设为关闭。

connectionTimeout : connectionTimeout为网络连接超时时间毫秒数。

maxThreads : maxThreads Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数,即最大并发数。

acceptCount : acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuse connection

maxProcessors与minProcessors : 在 Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最 大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。

通常Windows是1000个左右,Linux是2000个左右。

useURIValidationHack:

我们来看一下tomcat中的一段源码:

【security】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if  (connector.getUseURIValidationHack()) {
 
String uri = validate(request.getRequestURI());
 
if  (uri ==  null ) {
 
res.setStatus( 400 );
 
res.setMessage(“Invalid URI”);
 
throw  new  IOException(“Invalid URI”);
 
else  {
 
req.requestURI().setString(uri);
 
// Redoing the URI decoding
 
req.decodedURI().duplicate(req.requestURI());
 
req.getURLDecoder().convert(req.decodedURI(),  true );
 
}
 
}

  

可以看到如果把useURIValidationHack设成”false”,可以减少它对一些url的不必要的检查从而减省开销。

enableLookups=”false” : 为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值。

disableUploadTimeout :类似于Apache中的keeyalive一样

给Tomcat配置gzip压缩(HTTP压缩)功能

1
2
3
compression=”on” compressionMinSize=” 2048
 
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”

  

HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求网页后,从服务器端将网页文件压缩,再下载到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML,CSS,Javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率惊人。

1)compression=”on” 打开压缩功能

2)compressionMinSize=”2048″ 启用压缩的输出内容大小,这里面默认为2KB

3)noCompressionUserAgents=”gozilla, traviata” 对于以下的浏览器,不启用压缩

4)compressableMimeType=”text/html,text/xml” 压缩类型

最后不要忘了把8443端口的地方也加上同样的配置,因为如果我们走https协议的话,我们将会用到8443端口这个段的配置,对吧?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!–enable tomcat ssl–>
 
< Connector  port=”8443″ protocol=”HTTP/1.1″
 
URIEncoding=”UTF-8″ minSpareThreads=”25″ maxSpareThreads=”75″
 
enableLookups=”false” disableUploadTimeout=”true” connectionTimeout=”20000″
 
acceptCount=”300″ maxThreads=”300″ maxProcessors=”1000″ minProcessors=”5″
 
useURIValidationHack=”false”
 
compression=”on” compressionMinSize=”2048″
 
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain”
 
SSLEnabled=”true”
 
scheme=”https” secure=”true”
 
clientAuth=”false” sslProtocol=”TLS”
 
keystoreFile=”d:/tomcat2/conf/shnlap93.jks” keystorePass=”aaaaaa”
 
/>

  

好了,所有的Tomcat优化的地方都加上了。

(2)优化JDK

Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件CATALINAHOME/bin/catalina.shJAVAOPTS=CATALINAHOME/bin/catalina.sh的前面,增加如下设置:JAVAOPTS=”‘JAVA_OPTS” -Xms[初始化内存大小] -Xmx[可以使用的最大内存] 
或 
设置环境变量:export JAVA_OPTS=””JAVAOPTSXms[]Xmx[使]使80JAVAOPTS”−Xms[初始化内存大小]−Xmx[可以使用的最大内存]”一般说来,你应该使用物理内存的80JAVA_OPTS” -Xms700 —Xmx700 
# source /etc/profile

【参数说明】

-Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的 快一点,但是也可能会导致机器暂时间变慢。

-Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占 用更多的内存,超出了这个设置值,就会抛出OutOfMemory 异常。

-Xss 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程 大约需要占用多少内存,可能会有多少线程同时运行等。

-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64 。

-XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。


4.tomcat 有那几种Connector 运行模式?

tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。

(1)bio

默认的模式,性能非常低下,没有经过任何优化处理和支持.

(2)nio

利用java的异步io护理技术,no blocking IO技术.

想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为

<Connector port=”80″ protocol=”org.apache.coyote.http11.Http11NioProtocol” 
connectionTimeout=”20000″ 
URIEncoding=”UTF-8″ 
useBodyEncodingForURI=”true” 
enableLookups=”false” 
redirectPort=”8443″ />

启动后,就可以生效。

(3)apr

安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.

必须要安装apr和native,直接启动就支持apr。下面的修改纯属多余,仅供大家扩充知识,但仍然需要安装apr和native

 


相关文章:

  • 被遗忘的Logrotate
  • 压合细节
  • windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
  • IC卡的传输协议(2)-块传输协议T=1续【转】
  • Elasticsearch 2.3.0 老版本升级指南
  • java web
  • Office online server 部署
  • JRE与JDK简介
  • ConcurrentHashMap
  • Oracle语句异常
  • jmeter 302请求测试
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • Scrum4.0
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 打印出100到999的水仙花数
  • JS 中的深拷贝与浅拷贝
  • [笔记] php常见简单功能及函数
  • [译] 怎样写一个基础的编译器
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • ECS应用管理最佳实践
  • Effective Java 笔记(一)
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript中的对象个人分享
  • mysql 数据库四种事务隔离级别
  • mysql外键的使用
  • passportjs 源码分析
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 我建了一个叫Hello World的项目
  • 我看到的前端
  • 自制字幕遮挡器
  • kubernetes资源对象--ingress
  • 阿里云服务器购买完整流程
  • #include<初见C语言之指针(5)>
  • (1)STL算法之遍历容器
  • (2)STM32单片机上位机
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .bat批处理出现中文乱码的情况
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 使用配置文件
  • .NET 依赖注入和配置系统
  • .netcore 获取appsettings
  • .net解析传过来的xml_DOM4J解析XML文件