现在的位置: 首页 > 综合 > 正文

linux_web部署&性能参数调优

2017年12月28日 ⁄ 综合 ⁄ 共 5457字 ⁄ 字号 评论关闭
文章目录

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根目录的方法 

将应用部署到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" />

抱歉!评论已关闭.