tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈,因此需要修改一些参数。
tomcat性能优化:
链接:http://passover.blog.51cto.com/2431658/732629
链接:http://www.cnblogs.com/ggjucheng/archive/2013/04/16/3024731.html
链接:http://developer.51cto.com/art/201307/404299.htm
链接:http://chinaapp.sinaapp.com/thread-1854-1-1.html
tomcat内存设置
linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入 JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai" windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入 set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m 最大堆内存是1024m,对于现在的硬件还是偏低,实施时,还是按照机器具体硬件配置优化。
tomcat session过期时间设置:
{TOMCAT_HOME}/conf/web.xml文件中: <session-config> <session-timeout>-1</session-timeout> </session-config> -1表示永远不过期,默认值是30(分钟) 或者: 程序中通过servlet api直接修改,java 代码如下: HttpSession ses = request.getSession(); ses.setMaxInactiveInterval(10); //设置单位为秒,设置为-1永不过期。 加一个filter来做session的判断。当你想要的session不存在时,让页面跳转你想去的页面。 request.getRequestDispatcher("/login.jsp").forward(request, response);
tomcat最大连接数,最大处理的线程数设置
链接:http://sosuny.iteye.com/blog/413930
/conf/server.xml: <!-- edit: maxThreads="500"--> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="25" maxSpareThreads="75" maxIdleTime="30000" /> <!-- edit: acceptCount="1000"--> <Connector port="80" protocol="HTTP/1.1" acceptCount="1000" maxThreads="800" connectionTimeOut="30000" enableLookups="false" redirectPort="8443" URIEncoding="UTF-8"/> 另外的:tomcat6+ <Connector executor="tomcatThreadPool" 使用线程池,用较少的线程处理较多的访问,可以提高tomcat处理请求的能力 port="80" protocol="HTTP/1.1" maxThreads="600" 最多同时处理的连接数,Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数 minSpareThreads="100" 最小备用线程数,tomcat启动时的初始化的线程数; maxSpareThreads="300" 最大备用线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程; acceptCount="1000" 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接。 connectionTimeout="60000" 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。 keepAliveTimeout="15000" 长连接最大保持时间(毫秒) maxKeepAliveRequests="1" 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间) redirectPort="443" enableLookups="false" 是否反查域名,取值为:true或false。为了提高处理能力,应设置为false ....../> 默认的: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
连接池中的maxIdle,MaxActive,maxWait参数
注意:Hibernate配置文件中的配置会覆盖掉tomcat中的配置,所以不仅是tomcat,sql的配置要注意,程序代码中的各项配置也要注意检查! *maxActive:最大连接数据库连接数,设 0 为没有限制 *maxIdle:最大等待连接中的数量,设 0 为没有限制 *maxWait:最大等待毫秒数, 单位为 ms, 超过时间会出错误信息 <property name="maxActive" value="4000" /> <property name="maxIdle" value="1000" /> <property name="maxWait" value="30000" />
Hibernate关于数据库的配置:
hibernate.jdbc.fetch_size 50 hibernate.jdbc.batch_size 25 Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数。 Batch Size是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思。 这两个选项非常非常非常重要!!!将严重影响Hibernate的CRUD性能!
tomcat配置gzip压缩
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" executor="tomcatThreadPool" URIEncoding="utf-8" compression="on" compressionMinSize="50" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" /> compression="on" 打开压缩功能 compressionMinSize="50" 启用压缩的输出内容大小,默认为2KB noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩 检测网站gzip:http://gzip.zzbaike.com/
tomcat Server处理一个http请求的过程:
链接:http://sosuny.iteye.com/blog/493400
远程查看tomcat的控制台输出
# tail -f logs/catalina.out
查看tomcat运行中的连接数:
#netstat -na | grep ESTAB | grep 80 | wc -l
============================================
查看mysql最大连接数
MYSQL数据库安装完成后,默认最大连接数是100 mysql> show variables; 查看mysql各项参数max_connections mysql> show variables like 'max_connections';
设置mysql最大连接数
方式一: 这个办法治标不治本,重启服务以后最大连接数还是100。这个方法用于紧急扩充最大连接数用,不是长久之计。 #mysql -u root -p mysql> set GLOBAL max_connections=1000; mysql> show variables; 查看mysql各项参数max_connections mysql> exit; 方式二: 找到运行中mysql的/etc/my.cnf查找 max_connections=100 修改为 max_connections=1000,重启MYSQL服务即可生效。
查看mysql运行中的连接数
mysql>show status; | Threads_connected | 1 | | Threads_created | 1 | | Table_locks_immediate | 17 | | Table_locks_waited | 0 | | Max_used_connections | 1 |
tomcat部署多个应用
将应用部署到Tomcat根目录的目的是可以通过“http://[ip]:[port]”直接访问应用,而不是使用“http://[ip]:[port]/[appName]”上下文路径进行访问。
方法一:(最简单直接的方法)
删除原webapps/ROOT 目录下的所有文件,将应用下的所有文件和文件夹复制到ROOT文件夹下。
方法二:
删除原webapps/ROOT 目录下的所有文件,修改文件“conf/server.xml”,在Host节点下增加如下Context的内容配置:
<Host name="localhost" appBase="webapps" ...>
......
<Context path=""docBase="D:\apache-tomcat-7.0.47\myapps\helloweb" debug="0"reloadable="true"></Context>
</Host>
注意:
1)path 的值设置为空;
2)应用不要放到tomcat的webapps目录下(如上述配置是放到自定义的文件夹myapps内的),否则访问时路径很有问题;
3)docBase指定到绝对路径。
如此设置后重启tomcat,如果docBase指向的是war文件,会自动将war解压到webapps/ROOT 目录;
如果docBase指向的是应用已解压好的目录,如 docBase="D:\apache-tomcat-7.0.47\myapps\helloweb",
tomcat不会生成webapps/ROOT目录(这种情况下之前可以不用删除webapps/ROOT目录,但webapps/ROOT目录内的内容是无法访问的),访问时将直接使用docBase指定的目录。
---用一个Tomcat建立多个Server
链接:http://fatkun.com/2010/09/tomcat-with-multiple-server.html
1.在<Host>下配置多个<Context>元素
<Contextpath=""docBase="D:\apache-tomcat-7.0.47\myapps\helloweb"></Context>
<Contextpath="helloweb2"docBase="D:\apache-tomcat-7.0.47\myapps\helloweb2"></Context>
<Contextpath="helloweb3"docBase="D:\apache-tomcat-7.0.47\myapps\helloweb3"></Context>
通过http://127.0.0.1:8080/helloweb3/访问
2.通过配置多个<Host>元素(不同域名)
3.通过配置多个<Service>元素(不同端口)
---Tomcat去除端口号
<Connector port="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
只需要把"8080"改为"80"端口,要防止端口占用:
<Connector port="80"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />