一个系统的里的tomcat总设置的内存不得超过物理内存的0.75

(16G物理内存,tomcat总设置12G)

使用cronolog切割Tomcat日志

yum install -y cronolog

1、优化内核及TCP连接

2、修改Tomcat Connector运行模式为apr

Tomcat Connector有三种运行模式:

bio:阻塞IO bio是三种运行模式中性能最低第一种。

nio:是一个基于缓冲区,并能提供非阻塞I/O操作的JAVA API 因此NIO也成为非阻塞I/O,比bio拥有更好的并发性能。

apr:调用httpd核心链接库来读取或文件传输,从而提高tomat对静态文件的处理性能。Tomcat APR模式也是Tomcat在高并发下的首选运行模式:

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,

其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。

可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。

提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。

提示:Heap Size 最大不要超过可用物理内存的75%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。

第一步  – 提高JVM栈内存Increase JVM heap memory

要更改文件(catalina.sh) 位于"  ${tomcat}/bin/catalina.sh",下面,给出这个文件的配置信息,

tomcat8配置如下:--有些命令参数在tomcat8上已经不支持了,所以不能照抄。

JAVA_OPTS="-server -Xms2048m -Xmx2048m -Djava.awt.headless=true -Dfile.encoding=utf-8 "

-server  启用jdk 的 server 版;

 -Xms      java虚拟机初始化时的最小内存;

 -Xmx      java虚拟机可使用的最大内存;

 -XX:PermSize    内存永久保留区域

 -XX:MaxPermSize   内存最大永久保留区域

设置Tomcat启动的初始内存,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项,要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。

一般建议堆的最大值设置为可用内存的最大值的75%

第二步 – 解决JRE内存泄露  ${tomcat}/conf/server.xml

始终使用最新的tomcat服务器以获得更好的性能和可伸缩性,tomcat8已经默认使用。

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

第三步 – 线程池设置  ${tomcat}/conf/server.xml

通过调整连接器属性“maxThreads”完成设置。maxThreads的值应该根据流量的大小

默认:protocol="HTTP/1.1"

如果用nio

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"

如果用apr

<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"

        connectionTimeout="20000"

        URIEncoding="UTF-8"

        useBodyEncodingForURI="false"

        maxThreads="1000"

        minSpareThreads="100"

        enableLookups="false"

        redirectPort="8443"

        acceptCount="1000" />

connectionTimeout   连接超时

minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10

maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75

acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100

enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false

connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。

其中和最大连接数相关的参数为maxProcessors 和 acceptCount 。如果要加大并发连接数,应同时加大这两个参数。

web server允许的最大连接数还受制于操作系统的内核参数设置,通常 Windows 是 2000 个左右, Linux 是 1000 个左右。

protocol="org.apache.coyote.http11.Http11NioProtocol" ///使用java的异步io护理技术,no blocking IO

maxThreads=“600" 表示最多同时处理600个连接 ///最大线程数

minSpareThreads=“100" 表示即使没有人使用也开这么多空线程等待  ///初始化时创建的线程数

maxSpareThreads=“500" 表示如果最多可以空500个线程,例如某时刻有505人访问,之后没有人访问了,则tomcat不会保留505个空线程,而是关闭505个空的。   ///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

acceptCount="700"//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads  )

enableLookups      若设为true, 则支持域名解析,可把 ip 地址解析为主机名

redirectPort        在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口

URIEncoding          URL统一编码

在上述配置中,maxThreads值设定为“1000”,这指定可以由服务器处理的并发请求的最大数量。如果没有指定,这个属性的默认值为“200”。任何多出的并发请求将收到“拒绝连接”的错误提示,直到另一个处理请求进程被释放。错误看起来如下,

org.apache.tomcat.util.threads.ThreadPool logFull SEVERE: All threads (250) are

currently busy, waiting. Increase maxThreads (1000) or check the servlet status

如果应用提示上述错误,务必检查上述错误是否是由于单个请求花费太长时间造成的,这个问题的原因是这样的,有时候如果数据库连接不释放的话,进程将不会处理其它请求。

第4步- 压缩

Tomcat有一个通过在server.xml配置文件中设置压缩的选项。压缩可以在connector像如下设置中完成,

在上面第3步配置上接着加入:

compression="on"                 打开Gzip压缩功能

compressionMinSize="20480"         启用压缩的输出内容大小,这里面默认为20KB 

noCompressionUserAgents="gozilla, traviata"         对于以下的浏览器,不启用Gzip压缩

compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/octet-stream" />   Gzip压缩类型 

 

第五步- 数据库性能调优---

Tomcat性能在等待数据库查询被执行期间会降低。如今大多数应用程序都是使用可能包含“命名查询”的关系型数据库。如果是那样的话,Tomcat会在启动时默认加载命名查询,这个可能会提升性能。另一件重要事是确保所有数据库连接正确地关闭。给数据库连接池设置正确值也是十分重要的。我所说的值是指Resource要素的最大空闲数(maxIdle),最大连接数(maxActive),最大建立连接等待时间(maxWait)属性的值。

编辑context.xml--自定义,默认不添加

配置mysql全局的JDNI:

<Resource name="jndi/mybatis" 

 auth="Container"  

type="javax.sql.DataSource"  

driverClassName="com.mysql.jdbc.Driver"  

url="jdbc:mysql://xxxxxxxx:3306/mysql?characterEncoding=UTF-8"  

username="xxxx"  

password="xxxx"  

maxActive="20"  

maxIdle="10"  

maxWait="10000"/>

 

 其他选项

这些选项是:

开启浏览器的缓存,这样读取存放在webapps文件夹里的静态内容会更快,大大推动整体性能。

每当开机时,Tomcat服务器应当自动地重启。

一般情况下HTTPS请求会比HTTP请求慢。如果你想要更好的安全性,即使慢一点我们还是要选择HTTPS。

修改:catalina.jar,不显示tomcat版本信息

修改里面的 org/apache/catalina/util/ServerInfo.properties

管理AJP端口

AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。由于我们前端是由nginx做的反向代理,因此不使用此连接器,因此需要注销掉该连接器。

<!--

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

-->

管理用户

修改tomcat-usrs.xml

   <role rolename="tomcat"/>

    <role rolename="manager-script"/>

    <role rolename="manager-gui"/>

    <role rolename="manager-jmx"/>

    <role rolename="manager-status"/>

    <role rolename="admin-gui"/>

    <user username="tomcat" password="tomcat1234" roles="tomcat,manager-script,manager-gui,admin-gui,manager-status"/>

</tomcat-users>

使用cronolog切割Tomcat日志-----见其他文章

解决 java.util.prefs.BackingStoreException 报错warnning问题

mkdir -p /etc/.java/.systemPrefs

chmod -R 755 /etc/.java/.systemPrefs

chown -R appadmin.users /etc/.java/.systemPrefs

或者---

mkdir -p /home/appadmin/.java/.systemPrefs

chmod -R 755 /home/appadmin/.java/.userPrefs

chmod -R 755 /home/appadmin/.java/.systemPrefs

chown -R appadmin.users /home/appadmin/.java/.userPrefs

chown -R appadmin.users /home/appadmin/.java/.systemPrefs

export JAVA_OPTS="-Djava.util.prefs.systemRoot=/home/appadmin/.java/.systemPrefs -Djava.util.prefs.userRoot=/home/appadmin/.java/.userPrefs"

附件:[tomcat8.5.4](http://zhangyu233.com/wp-content/uploads/tomcat8.5.4.zip)