Tomcat性能优化根据不同的环境和条件,须分别对待,如服务器硬件环境,操作系统环境,网络环境,以及用户使用的情况等等,最好结合性能测试工具来做。以下列出几点常用的调优方法:
- 调 整Java参数,如果用的是Sun的Hotspot VM,可以Java命令加上参数”-server -Xms -Xmx”,-server表示启用Java HotSpot Server VM,-Xms和-Xmx分别表示JVM初始内存大小和可以使用的最大内存,根据具体情况和需要调大这两个参数的值,默认值分别为2m和64m,显然太小 需要调大。在Tomcat/bin下的catalina.bat(for windows)和catalina.sh(for linux and unix)文件的最前面加上JAVA_OPTS=`-server -Xms256m -Xmx512m`。
- 禁用DNS查询,设置connector中的enableLookups=”false”,该参数的具体说明见Tomcat文档。设置如下:
- <Connector port=”8080″ maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″ enableLookups=”false” redirectPort=”8443″ acceptCount=”100″ debug=”0″ connectionTimeout=”20000″ disableUploadTimeout=”true” />
- <Connector port=”8009″ enableLookups=”false” redirectPort=”8443″ debug=”0″ protocol=”AJP/1.3″ />
- 调整Tomcat线程参数:
- maxThreads,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。
- acceptCount,指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
- connnectionTimeout,网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。可设置为20000毫秒。
- minSpareThreads,Tomcat初始化时创建的线程数。
- maxSpareThreads,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
这些参数需要根据实际情况调整。
附:几篇Tomcat相关的性能测试报告
相关链接:
Tags: Tomcat,性能.
在Java中处理一些路径相关的问题的时候,如要取出ie浏览器上传文件的文件名,由于ie会把整个文件路径都作为文件名上传,需要用java.lang.String中的replaceAll或者split来处理。如:
上传文件路径为:C:\Documents and Settings\collin\My Documents\111-lazyloading.gif,欲取出文件名:111-lazyloading.gif。可以
String temp[] = name.split(”\\\\”);
if (temp.length > 1) {
name = temp[temp.length - 1];
}
regex为\\\\,因为在java中\\表示一个\,而regex中\\也表示\,所以当\\\\解析成regex的时候为\\。
由于unix中file.separator为斜杠”/”,下面这段代码可以处理windows和unix下的所有情况:
String temp[] = name.replaceAll(”\\\\”,”/”).split(”/”);
if (temp.length > 1) {
name = temp[temp.length - 1];
}
当Apache既要支持tomcat又要支持php,同时如果tomcat下默认编码为UTF-8,而php的默认编码为根本312,这个时候如果 http.conf中AddDefaultCharset utf-8,则所有的php页面将显示为乱码,如果改为改为gb2312,则跑在tomcat下的应用可能会出现乱码。有两种解决的办法:
1. 给tomcat中的所有的应用都加上encoding filter,强行给response加上你需要的编码,这样,当tomcat返回的response经过apache返回到用户浏览器的过程 中,AddDefaultCharset将不会起作用。然后在把AddDefaultCharset改成php需要的编码就可以了。这种方法有一定的缺 陷,需要修改tomcat下的应用,而且如果php应用有两种不同的编码,还是会出现乱码的情况。
2. 修改http.conf中的AddDefaultCharset为AddDefaultCharset off,关闭apache默认编码,这样php的应用和tomcat下的应用都分别采用各自的编码,apache不会强行修改这些应用返回的 response的http头中的charset。
Tags: Apache,中文编码.
对于像聊天室、在线IM这类应用,如果只是用ajax,还是有一定的缺陷,因为这些应用要求实时性很高,而传统的web应用都是基于请求-响应模式,所以需要不断的去定时刷新页面才能保准与服务器段状态的一致性,显然,对于这类应用来说,采用刷新的方式明显是在浪费资源。
有人提出了一种叫Comet的 概念,就是保持客户端与server端的http链接,这样服务器端有任何更新可以马上通过response推给客户端,可以通过设置http协议中的 keep-alive头来实现,已经有利用push技术实现的项目,如gmail中新增的在线gtalk,具体其是怎么实现还未有文档参考。
comet存在的一个问题是当在线人数太多,需要保持太多的http链接,这在性能上会带来很大问题,而且现在主流的web server都没有专门正对http push进行优化。
dojo据说已经支持comet,dwr也将在下一个版本支持。
参考资料:
Tags: Ajax,Comet.
RoR热已经有一段时间了,还在持续,越来越多的开发人员开始关注RoR,一部分人Java开发人员已经加入RoR的队伍,开始用RoR做具体项目了。
Sun的新CEO放出话来“Java的核心部分将在3个月内开源”,可能会是Java C和Hotspot JVM部分。
未来的技术发展中,基于脚本语言的轻量级web开发框架将会继续飞速发展,互联网web2.0概念的继续深化,越来越需要能够灵活面对需求变化以及快速开发的框架和语言,RoR真是在这样的环境中催生并在短时间内在全球技术圈内吸引大量眼球和追捧。大型且需求相对复杂的系统现阶段的架构首选还是基于Java 的,毕竟Java开源社区有太多有价值的framework和library了。但面对RoR的继续发热,Java在一些领域会慢慢丢失用户,开发人员大规模转投或者开始疯狂的学习RoR的情形已经出现。Java需要有所变化,可以看到,Sun已经在这方面做出了一些努力,把JRuby团队拉入旗下,以便促进JRuby的进一步发展,包括这次决心把Java开源,也是为了更好的利用用户和社区的力量,来促进Java的发展,就如当初IBM把Eclipse开源了,看看用户和社区为Eclipse贡献的插件,如果没有这些插件,Eclipse根本不可能有今天的地位,也就不会有Borland放弃JBuilder原先的平台,而转投Eclipse平台,一心开发商业插件了。 Java开源的前景到底如何,谁也看不准,估计Sun这次也是下了很大的决心,有一点是可以看到的,有那么多Java开发人员和社区做支持,Java至少会比掌控在Sun一人手里发展的更快。
几年后的Java平台上,我们可能能够直接在上面跑PHP、python、ruby,相互之间可以在语言的层面上互相调用等,期待…
Tags: java,RoR.