﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-JAVA-文章分类-Tomcat容器</title><link>http://www.blogjava.net/zzzlyr/category/55172.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 01 Apr 2017 06:53:02 GMT</lastBuildDate><pubDate>Sat, 01 Apr 2017 06:53:02 GMT</pubDate><ttl>60</ttl><item><title>Tomcat6 调优设置内存和连接数</title><link>http://www.blogjava.net/zzzlyr/articles/424218.html</link><dc:creator>张钊钊</dc:creator><author>张钊钊</author><pubDate>Wed, 08 Apr 2015 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/zzzlyr/articles/424218.html</guid><wfw:comment>http://www.blogjava.net/zzzlyr/comments/424218.html</wfw:comment><comments>http://www.blogjava.net/zzzlyr/articles/424218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zzzlyr/comments/commentRss/424218.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zzzlyr/services/trackbacks/424218.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="font-size: 12pt;">公司的一个服务器使用Tomcat6默认配置，在后台一阵全点击服务器就报废了，查了一下就要是PERMSIZE默认值过小造成（16-64）</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="font-size: 12pt;">TOMCAT_HOME/bin/catalina.sh</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="font-size: 12pt;">添加一行：JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m"</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="font-size: 12pt;">问题解决（可能为调用JAR包过多原因）下面是网上看到一些设置</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="font-size: 12pt;">JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="font-size: 12pt;">当在对其进行并发测试时，基本上30个USER上去就当机了，还要修改默认连接数设置：以下红色四行TOMCAT6中好相没有，手工加上就可以了，基本上可以解决连接数过大引起的死机。具体数值可跟据实际情况设置</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; &lt;Connector port="80" protocol="HTTP/1.1"&nbsp;</span><br /><span style="color: #ff0000; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="600"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #ff0000; font-size: 12pt;">minSpareThreads="100"<br /></span><span style="color: #ff0000; font-size: 12pt;">maxSpareThreads="500"<br /></span><span style="color: #ff0000; font-size: 12pt;">acceptCount="700"</span><br /><span style="font-size: 12pt;">connectionTimeout="20000"&nbsp;</span><br /><span style="font-size: 12pt;">redirectPort="8443" /&gt;</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="font-size: 12pt;">这样设置以后，基本上没有再当机过。。。。。</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="color: #ff0000; font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="600"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ///最大线程数<br /></span><span style="color: #ff0000; font-size: 12pt;">minSpareThreads="100"///<span style="color: #000000; font-size: 12pt;">初始化时创建的线程数</span><br /></span><span style="color: #ff0000; font-size: 12pt;">maxSpareThreads="500"///<span style="color: #000000; font-size: 12pt;">一旦创建的线程超过这个值，Tomcat就会关闭不再需要<br /></span><span style="color: #000000; font-size: 12pt;">的socket线程。</span><br /><br /></span><span style="color: #ff0000; font-size: 12pt;">acceptCount="700"//</span><span style="font-size: 12pt;">指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理队列中的请求数，超过这个数的请求将不予处理</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><span style="font-size: 12pt;">----------------------------------------------------------------------------------------------------------------------------------</span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;">&nbsp;</p><span style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.19791603088379px; background-color: #ffffff;"><p style="margin: 0px; padding: 0px;"><strong><span style="color: #ff0000; font-size: 12pt;">一、Tomcat的JVM提示内存溢出</span></strong></p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">查看%TOMCAT_HOME%\logs文件夹下，日志文件是否有内存溢出错误</span></p><p style="margin: 0px; padding: 0px;"><span style="color: #ff0000; font-size: 12pt;"><strong>二、修改Tomcat的JVM</strong></span></p><p style="margin: 0px; padding: 0px;"><span style="color: #ff0000; font-size: 12pt;"><strong>1、错误提示：<span style="color: #000000;">java.lang.OutOfMemoryError: Java heap space</span></strong></span></p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">Tomcat默认可以使用的内存为128MB，在较大型的应用项目中，这点内存是不够的，有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误，Out of Memory(系统内存不足)的异常，从而导致客户端显示500错误，一般调整Tomcat的使用内存即可解决此问题。&nbsp;</span><br /><br /><span style="font-size: 12pt;">Windows环境下修改&#8220;%TOMCAT_HOME%\bin\catalina.bat&#8221;文件，在文件开头增加如下设置：</span><strong style="font-size: 12pt;">set JAVA_OPTS=-Xms256m -Xmx512m</strong>&nbsp;<br /><br />Linux环境下修改&#8220;%TOMCAT_HOME%\bin\catalina.sh&#8221;文件，在文件开头增加如下设置：<strong>JAVA_OPTS=&#8217;-Xms256m -Xmx512m&#8217;&nbsp;<br /></strong><br />其中，-Xms设置初始化内存大小，-Xmx设置可以使用的最大内存。</p><p style="margin: 0px; padding: 0px;"><strong><span style="color: #ff0000; font-size: 12pt;">2、错误提示：java.lang.OutOfMemoryError: PermGen space</span></strong></p><p style="margin: 0px; padding: 0px;"><strong style="font-size: 12pt;">原因：<br /></strong>PermGen space的全称是Permanent Generation space,是指内存的永久保存区域，这块内存主要是被JVM存<br />放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中，它和存放类实例(Instance)的<br />Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理，所以如果你的应用<br />中有很CLASS的话,就很可能出现PermGen space错误，这种错误常见在web服务器对JSP进行pre compile的<br />时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信<br />息了。<br /><strong>解决方法：</strong></p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">在catalina.bat的第一行增加：</span><br /><span style="font-size: 12pt;">set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -</span><br /><span style="font-size: 12pt;">XX:MaxPermSize=256m</span><br /><span style="font-size: 12pt;">在catalina.sh的第一行增加：</span><br /><span style="font-size: 12pt;">JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -</span><br /><span style="font-size: 12pt;">XX:MaxPermSize=256m</span></p><p style="margin: 0px; padding: 0px;"><strong><span style="color: #ff0000; font-size: 12pt;">3、JVM设置</span></strong></p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">堆的尺寸&nbsp;</span><br /><span style="font-size: 12pt;">-Xmssize in bytes&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 设定Java堆的初始尺寸，缺省尺寸是2097152 (2MB)。这个值必须是1024个字节（1KB）的倍数，且比它大。（-server选项把缺省尺寸增加到32M。）&nbsp;</span><br /><span style="font-size: 12pt;">-Xmnsize in bytes&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 为Eden对象设定初始Java堆的大小，缺省值为640K。（-server选项把缺省尺寸增加到2M。)&nbsp;</span><br /><span style="font-size: 12pt;">-Xmxsize in bytes&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 设定Java堆的最大尺寸，缺省值为64M，（-server选项把缺省尺寸增加到128M。） 最大的堆尺寸达到将近2GB（2048MB）。&nbsp;</span><br /><br /><span style="font-size: 12pt;">请注意：很多垃圾收集器的选项依赖于堆大小的设定。请在微调垃圾收集器使用内存空间的方式之前，确认是否已经正确设定了堆的尺寸。&nbsp;</span><br /><br /><span style="font-size: 12pt;">垃圾收集:内存的使用&nbsp;</span><br /><span style="font-size: 12pt;">-XX:MinHeapFreeRatio=percentage as a whole number&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 修改垃圾回收之后堆中可用内存的最小百分比，缺省值是40。如果垃圾回收后至少还有40%的堆内存没有被释放，则系统将增加堆的尺寸。&nbsp;</span><br /><span style="font-size: 12pt;">-XX:MaxHeapFreeRatio=percentage as a whole number&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 改变垃圾回收之后和堆内存缩小之前可用堆内存的最大百分比，缺省值为70。这意味着如果在垃圾回收之后还有大于70%的堆内存，则系统就会减少堆的尺寸。&nbsp;</span><br /><span style="font-size: 12pt;">-XX:NewSize=size in bytes&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 为已分配内存的对象中的Eden代设置缺省的内存尺寸。它的缺省值是640K。（-server选项把缺省尺寸增加到2M。）&nbsp;</span><br /><span style="font-size: 12pt;">-XX:</span><span style="background-color: #ffff00; font-size: 12pt;">MaxNewSize</span><span style="font-size: 12pt;">=size in bytes&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 允许您改变初期对象空间的上限，新建对象所需的内存就是从这个空间中分配来的，这个选项的缺省值是640K。（-server选项把缺省尺寸增加到2M。）&nbsp;</span><br /><span style="font-size: 12pt;">-XX:NewRatio=value&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 改变新旧空间的尺寸比例，这个比例的缺省值是8，意思是新空间的尺寸是旧空间的1/8。&nbsp;</span><br /><span style="font-size: 12pt;">-XX:SurvivorRatio=number&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 改变Eden对象空间和残存空间的尺寸比例，这个比例的缺省值是10，意思是Eden对象空间的尺寸比残存空间大survivorRatio+2倍。&nbsp;</span><br /><span style="font-size: 12pt;">-XX:TargetSurvivorRatio=percentage&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 设定您所期望的空间提取后被使用的残存空间的百分比，缺省值是50。&nbsp;</span><br /><span style="font-size: 12pt;">-XX:MaxPermSize=size in MB&nbsp;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 长久代（permanent generation）的尺寸，缺省值为32（32MB）。</span></p><p style="margin: 0px; padding: 0px;"><strong><span style="color: #ff0000; font-size: 12pt;">三、查看Tomcat的JVM内存</span></strong></p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">1. Tomcat6中没有设置任何默认用户，因而需要手动往Tomcat6的conf文件夹下的tomcat-users.xml文件中添加用户。</span></p><p style="margin: 0px; padding: 0px;">&nbsp;</p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 如：&lt;role rolename="manager"/&gt;</span><br /><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;user username="tomcat" password="tomcat" roles="manager"/&gt;</span></p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; 注：添加完需要重启Tomcat6。</span></p><p style="margin: 0px; padding: 0px;">&nbsp;</p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">2.&nbsp;访问http://localhost:8080/manager/status，输入上面添加的用户名和密码。</span></p><p style="margin: 0px; padding: 0px;">&nbsp;</p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">3. 然后在如下面的JVM下可以看到内存的使用情况。</span></p><h1><span style="font-size: 12pt;">JVM</span></h1><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">&nbsp;&nbsp;&nbsp; Free memory: 2.50 MB Total memory: 15.53 MB Max memory: 63.56 MB</span></p><p style="margin: 0px; padding: 0px;"><strong><span style="color: #ff0000; font-size: 12pt;">四、Tomcat连接数设置</span></strong></p><p style="margin: 0px; padding: 0px;"><span style="font-size: 12pt;">在tomcat配置文件server.xml中的&lt;Connector ... /&gt;配置中，和连接数相关的参数有：</span><br /><span style="font-size: 12pt;">minProcessors：最小空闲连接线程数，用于提高系统处理性能，默认值为10</span><br /><span style="font-size: 12pt;">maxProcessors：最大连接线程数，即：并发处理的最大请求数，默认值为75</span><br /><span style="font-size: 12pt;">acceptCount：允许的最大连接数，应大于等于maxProcessors，默认值为100</span><br /><span style="font-size: 12pt;">enableLookups：是否反查域名，取值为：true或false。为了提高处理能力，应设置为false</span><br /><span style="font-size: 12pt;">connectionTimeout：网络连接超时，单位：毫秒。设置为0表示永不超时，这样设置有隐患的。通常可设置为30000毫秒。</span><br /><br /><span style="font-size: 12pt;">其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数，应同时加大这两个参数。</span><br /><br /><br /><span style="font-size: 12pt;">web server允许的最大连接数还受制于操作系统的内核参数设置，通常Windows是2000个左右，Linux是1000个左右。Unix中如何设置这些参数，请参阅Unix常用监控和管理命令</span></p></span><img src ="http://www.blogjava.net/zzzlyr/aggbug/424218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zzzlyr/" target="_blank">张钊钊</a> 2015-04-08 15:04 <a href="http://www.blogjava.net/zzzlyr/articles/424218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>