Tomcat之JVM内存查看
tomcat7的user配置
修改tomcat 的config文件夹下的tomcat-users.xml 文件
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<!-- 访问Server Status和Manager App的角色 -->
<role rolename="manager-gui"/>
<!-- 访问Host Manager 的角色 -->
<role rolename="admin-gui"/>
<user username="admin" password="admin" roles="admin-gui,manager-gui"/>
</tomcat-users>
访问网址
访问网址:http://localhost:8080/manager/status
详解
Tomcat在不设置jvm参数的情况下,默认分配给jvm的内存是总内从的1/4 当前我们电脑是16G内存
JVM参数设置和详细说明
通过命令把jvm的当前参数输出到文件中 打开dos命令 jmap -heap pid 直接输出到dos jmap -heap pid > D:\4.txt 输出到文件中
jmap -heap 16980 > D:\4.txt
此处的jdkid是16980
Tomcat之启动优化
标准配置
<Connector
port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="600"
minSpareThreads="100"
maxSpareThreads="500"
acceptCount="700"
connectionTimeout="20000"
redirectPort="8443"
/>
<!-- 参数说明
maxThreads:线程池中最大活跃线程数,默认值200(Tomcat7和8都是)
minSpareThreads:核心线程数,线程池中保持的最小线程数,默认是10
maxSpareThreads:线程池中保持的最大线程数
maxIdleTime:线程空闲的最大时间,当空闲超过该值时关闭线程(除非线程数小于minSpareThreads),单位是ms,默认值60000(1分钟)
acceptCount:线程队列数,默认是100
URIEncoding:http-get请求中,使用何种字符集对查询字符串进行编码,默认为"iso-8859-1"
-->
复杂配置
注意事项
指定JDK路径动态配置 一般情况下我们都是让Tomcat更具的JAVA_HOME 环境变量自动去找jdk的路径,但是当通过一台服务器有不同的jdk版本久会出问题。我们可以在catalina.bat 脚本中动态设置JAVA_HOME 解决此问题。
rem myconfig
set JAVA_OPTS=%JAVA_OPTS% -Xmx1024m -Xms1024m
set JAVA_HOME=D:\Program Files\Java\jdk1.7.0_13
查看tomcat的jvm能承受的极限内存可以通过如下命令测试
java -Xmx1211m -version
由此可以见,我的jvm能够承受的最大内存为1211m
Tomcat之并发优化
简单版配置
<Connector
port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="600"
minSpareThreads="100"
maxSpareThreads="500"
acceptCount="700"
connectionTimeout="20000"
redirectPort="8443"
/>
复杂版(优化版)
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
URIEncoding="UTF-8"
minSpareThreads="100"
maxSpareThreads="500"
eanableLookups="true"
disableUploadTimeout="true"
connectionTimeout="-1"
acceptCount="700"
maxThreads="600"
maxProcessors="1000"
minProcessors="5"
useURIValidationHack="false"
compression="on"
compressionMinSize="2048"
compressableMineType="text/html,text/xml,text/JavaScript,text/css,text/plain"
redirectPort="8443"
/>
<!-- 注释说明=======================================================start==
port : tomcat作为一个网络server端,它需要暴露一个socket端口来accept客户端的链接,可以通过port指定
protocol: 网络协议
URIEncoding:http-get请求中,使用何种字符集对查询字符串进行编码,默认为"iso-8859-1,解决中文乱码问题
minSpareThreads:最小的备用线程数,tomcat启动时的初始化的线程数,默认是10最小备用线程数,
maxSpareThreads:最大的备用线程数,一旦创建的线程超过这个值,tomcat久会关闭不再需要的socket线程
eanableLookups="true":设置为false 使用允许DNS查询,通常情况设置false,表示是否反查域名,为了提高性能我们一般设置为false,如果希望调用request.getRemoteHost()进行DNS查询,以返回远程客户端的实际主机名,将他设置true。
disableUploadTimeout="true":true:不去给上传的附件单独做超时设置,
connectionTimeout="-1":-1:表示强链接,永不超时,这样就不用设置文件上传的超时时间了,此参数表示当client与tomcat建立连接之后,在"connectionTimeout"时间之内,仍然没有得到client的请求数据,此时连接将会被断开,默认20s
acceptCount:线程队列,默认100,当线程数达到maxThreads就会把线程放在队列中, 当队列满了以后其他请求久会被拒绝
maxThreads:线程池的最大线程数,即最大并发,默认为200
maxProcessors="1000":同时最大的处理线程数,如果系统中已经有这么多个线程,那么,更多的链接请求会进入队列。
minProcessors="5":最小处理线程数,即没有任何http请求时,tomcat也保持至少这么多线程以等待处理。
useURIValidationHack="false":减少它对url的不必要的检查从而俭省开销,为提高性能可以设置为false
compression="on":是否对http相应数据启用Gzip压缩,可选值为"off"或者"on";这是一个值得商榷的参数;如果开启压缩,意味着较少的网络传输量,但是将消耗一定的CPU.如果你 的应用有较高的CPU性能结余,且响应数据均是一些文本字符串, 那么开启压缩,会有较大的收益.(并不是所有的浏览器都能够合理的支持gzip压缩,特别是低版本
compressionMinSize="2048":压缩包大小为2kb
compressableMineType="text/html,text/xml,text/JavaScript,text/css,text/plain":压缩类型
redirectPort="8443"
注释说明=============================================================end -->
Tomcat之内存优化
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -server -Xmx2048m -Xms2048m -Xss128k -XX:MaxPermSize=512m -XX:PermSize=512m -XX:+DisableExplicitGC -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
注意:如果设置gc回收方式,如-XX:+UseConcMarkSweepGC,要把XX:NewRatio=2 -XX:SurvivorRatio=8 参数显示的设置一边,以防gc方式影响新生代和老年去的正常比例
压力测试
apache的ab压测 ab压测工具:apache的测试工具,用的是ab.exe 所以叫ab压测 优点:给出重要的信息,如吞吐量,并发等 官方下载地址:https://www.apachehaus.com/cgi-bin/download.plx 简单使用:下载后解压到适当位置。 JMeter工具压力测试(推荐,可以看图标) http://jmeter-plugins.org/downloads/all/
Tomcat之BIO/NIO/APR的三大模式
4种socket链接方式
org.apache.coyote.http11.Http11Protocol :BIO
org.apache.coyote.http11.Http11NioProtocol :NIO
org.apache.coyote.http11.Http11Nio2Protocol :NIO2
org.apache.coyote.http11.Http11AprProtocol :APR
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
BIO、NIO、AIO、APR适用场景分析:
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。
NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。
APR方式 Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。
最佳实战
在catlina的rem Guess CATALINA_HOME if not defined 之前配置
rem myconfig
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8 -server -Xmx2048m -Xms2048m -Xss128k -XX:MaxPermSize=512m -XX:PermSize=512m -XX:+DisableExplicitGC -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
set JAVA_HOME=D:\Program Files\Java\jdk1.7.0_13
在tomcat的config/server.xml 中配置Connector
<!-- 复杂版 -->
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
URIEncoding="UTF-8"
minSpareThreads="100"
maxSpareThreads="500"
eanableLookups="true"
disableUploadTimeout="true"
connectionTimeout="-1"
acceptCount="700"
maxThreads="600"
maxProcessors="1000"
minProcessors="5"
useURIValidationHack="false"
compression="on"
compressionMinSize="2048"
compressableMineType="text/html,text/xml,text/JavaScript,text/css,text/plain"
redirectPort="8443"
/>
<!-- 注释说明=======================================================start==
port : tomcat作为一个网络server端,它需要暴露一个socket端口来accept客户端的链接,可以通过port指定
protocol: 网络协议
URIEncoding:http-get请求中,使用何种字符集对查询字符串进行编码,默认为"iso-8859-1,解决中文乱码问题
minSpareThreads:最小的备用线程数,默认是10
maxSpareThreads:最大的备用线程数,一旦创建的线程超过这个值,tomcat久会关闭不再需要的socket线程
eanableLookups="true":设置为false 使用允许DNS查询,通常情况设置false,表示是否反查域名,为了提高性能我们一般设置为false,如果希望调用request.getRemoteHost()进行DNS查询,以返回远程客户端的实际主机名,将他设置true。
disableUploadTimeout="true":true:不去给上传的附件单独做超时设置,
connectionTimeout="-1":-1:表示强链接,永不超时,这样就不用设置文件上传的超时时间了,此参数表示当client与tomcat建立连接之后,在"connectionTimeout"时间之内,仍然没有得到client的请求数据,此时连接将会被断开,默认20s
acceptCount:线程队列,默认100,当线程数达到maxThreads就会把线程放在队列中, 当队列满了以后其他请求久会被拒绝
maxThreads:线程池的最大线程数,即最大并发,默认为200
maxProcessors="1000":同时最大的处理线程数,如果系统中已经有这么多个线程,那么,更多的链接请求会进入队列。
minProcessors="5":最小处理线程数,即没有任何http请求时,tomcat也保持至少这么多线程以等待处理。
useURIValidationHack="false":减少它对url的不必要的检查从而俭省开销,为提高性能可以设置为false
compression="on":是否对http相应数据启用Gzip压缩,可选值为"off"或者"on";这是一个值得商榷的参数;如果开启压缩,意味着较少的网络传输量,但是将消耗一定的CPU.如果你 的应用有较高的CPU性能结余,且响应数据均是一些文本字符串, 那么开启压缩,会有较大的收益.(并不是所有的浏览器都能够合理的支持gzip压缩,特别是低版本
compressionMinSize="2048":压缩包大小为2kb
compressableMineType="text/html,text/xml,text/JavaScript,text/css,text/plain":压缩类型
redirectPort="8443"
注释说明=============================================================end -->
在tomcat/config/tomcat-users.xml 中 配置
<tomcat-users>
<!-- 访问Server Status和Manager App的角色 -->
<role rolename="manager-gui"/>
<!-- 访问Host Manager 的角色 -->
<role rolename="admin-gui"/>
<user username="admin" password="admin" roles="admin-gui,manager-gui"/>
</tomcat-users>
其他一些注意事项
linux 的安装目录里面不许有空格,不许有中文,服务器的台数一般是2的n次方倍数,最大设置为总内存的3/4 32位的linux操作系统内存会受限,最大4G,所以一定要装64位的系统 正向代理:我知道代理地址 反向代理:我不知道代理地址 webService:一通信协议 webServer:web服务器,如ngix appServer:应用服务器,如tomcat
|