tomcat+mysql性能优化

在单数据库,单计算机服务下随着用户的增加,随之而来的会出现很多问题,诸如连接、jvm空间不足等等,这些问题带来的后果就是性能大打折扣,客户投诉。当然处理办法有多种,比如添加服务,做负载均衡,添加缓存服务,动静分离等等。这里我们只谈谈对服务器(tomcat)和数据库(mysql)的优化。

  1. tomcat相关
  • 增加jvm堆栈的内存

我们在做大数据测试时常常会碰到这样一类错误:outofmemoryerror:java heap space

 这类问题出现的原因就是jvm的堆内存已满,导致内存溢出。解决这类问题首先要查的还是程序,看是否有死循环之类的bug问题,还有就是增加jvm的堆内存。这个配置需要在tomcat的bin目录下的catalina.bat文件中设置。编辑这个文件,在文件的rem -----------------------------------------------------------------和rem Guess CATALINA_HOME if not defined之间插入:set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m,这里做下介绍  -Xms(JVM初始化堆的大小 不要超过物理内存的80% ),-Xmx(JVM堆的最大值 不要超过物理内存的80% ),-XX:PermSize(jvm非堆内存初始值 默认是物理内存的1/64),XX:MaxPermSize(jvm非堆内存最大值 默认是物理内存的1/4)

  • 打开tomcat的NIO

熟悉IO与NIO的都知道,他们的区别和对性能的影响,这里就不多说了,其实tomcat是支持java NIO特性的,只不过默认情况下并未开启该功能,比如我们在未配置过的tomcat中常常会发现如下的配置

<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
			   URIEncoding="UTF-8"
               redirectPort="8443" />
 

  而且启动时你会发现如下信息

2012-10-26 18:14:07 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2012-10-26 18:14:07 org.apache.catalina.startup.Catalina load
 

 以下便是开启tomcatNIO特性

<Connector  URIEncoding="UTF-8" 
    		    acceptCount="1000" 
    			connectionTimeout="20000" port="8080" 
    			protocol="org.apache.coyote.http11.Http11NioProtocol" 
    			redirectPort="8443"/>
 
  •   配置tomcat线程池

在tomcat启动时创建线程池,解决tomcat在获取请求时候创建线程的压力消耗,从而提升tomcat处理能力

在tomcat的server.xml文件中添加如下线程池声明

<Executor name="tomcatThreadPool" 
                namePrefix="catalina-exec-" 
                maxThreads="1000" 
                minSpareThreads="300" />
 

 

相关参数说明

     name:线程池的名称

     namePrefix:线程池的前缀

     maxThread:最大线程数

     minSpareThreads:初始化线程数

声明完线程池后,接着就使用该线程池,在tomcat的server.xml的连接器中配置该线程池,效果如下

<Connector  executor="tomcatThreadPool"  
    		   URIEncoding="UTF-8" 
    		   acceptCount="1000" 
    		   connectionTimeout="20000"   
                   port="8080"   			
                   protocol="org.apache.coyote.http11.Http11NioProtocol" 
    		   redirectPort="8443"/>

你可能感兴趣的:(tomcat,mysql,性能优化)