Apache Tomcat JVM Headsize Redhat 5 64位32内存2四核至强性能问题

问题描述:

请帮我调整我的服务器 当一次连接数超过500时,我的httpd只是冻结并停止响应。Apache Tomcat JVM Headsize Redhat 5 64位32内存2四核至强性能问题

我有相同的结构,因为2008和现在现在添加了一些RAM I有32 GB每个两个服务器

第一个具有安装RHEL 5 64位2.6.18-53.1.4.el5xen 的它提供的JNLP到谁连接到第二个服务器

的Apache 2.2.3的httpd.conf

<IfModule prefork.c> 
StartServers  8 
MinSpareServers 10 
MaxSpareServers 75 
ServerLimit  1100 
MaxClients  1100 
MaxRequestsPerChild 4000 
</IfModule> 

<IfModule worker.c> 
StartServers   2 
MaxClients   150 
MinSpareThreads  25 
MaxSpareThreads  75 
ThreadsPerChild  25 
MaxRequestsPerChild 0 
</IfModule> 

的Java 1.6.0_27处理后,用下面的参数客户

java -server -Xmx1280M -XX:MaxPermSize=256M -Djava.awt.headless=true ... 

的Tomcat的server.xml用以下参数

... connectionTimeout="12000" maxSpareThreads="250" protocol="AJP/1.3" 
maxHttpHeaderSize="8192" disableUploadTimeout="true" minSpareThreads="25" 
useBodyEncodingForURI="true" maxThreads="500" acceptCount="100" 
enableLookups="false" ... 

第二服务器只有JVM java程序HW同上 冻结当用户数量连接超过600 我已经改变XMX从4000米到26克昨天希望这将允许在这个过程中使用更多的RAM。但是没有看到它在顶部使用了4g以上。

java -server -Xmx26g -Djava.awt.headless=true -Dfile.encoding=UTF-8 -jar 

top - 01:34:10 up 252 days, 8:02, 1 user, load average: 0.00, 0.02, 0.00 
Tasks: 127 total, 1 running, 126 sleeping, 0 stopped, 0 zombie 
Cpu(s): 1.8%us, 0.2%sy, 0.0%ni, 97.7%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 37049860k total, 3225916k used, 33823944k free, 331836k buffers 
Swap: 10223608k total,  0k used, 10223608k free, 2409808k cached 

top - 03:57:04 up 252 days, 8:02, 1 user, load average: 0.01, 0.02, 0.00 
Tasks: 145 total, 1 running, 144 sleeping, 0 stopped, 0 zombie 
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.8%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 37108368k total, 36117600k used, 990768k free, 218364k buffers 
Swap: 2031608k total,  120k used, 2031488k free, 33518948k cached 

请帮我解决这个问题。我打算升级所有这些,但不知道如果我的Java程序将与新版本的rhel apache tomcat和jvm一起工作。

+1

当系统无响应时,JVM会执行什么操作?底层操作系统有什么作用? –

+0

JVM 64位?另外,1.6有点老,我会担心安全问题... – ppeterka

+0

JVM工作,操作系统非常慢,第二台服务器作为一个Web会议。 bouth服务器运行系统是可以的。 – Olzh

这很可能是你在Tomcat的侧

maxThreads="500" 
在server.xml

问题... ...将其抬起,这将允许更多的并发连接。

maxThreads

请求处理线程的最大数量由该连接器,其因此确定可处理并发请求的最大数目来创建。如果未指定,则将此属性设置为200.如果执行程序与此连接程序关联,则该属性将被忽略,因为连接程序将使用执行程序而不是内部线程池执行任务。

From Apache Tomcat documentation

而且,这部分解释了为什么600个客户端可以连接:

acceptCount="100" 

这使得其他100个客户在队列中等待,直到担任

acceptCount

所有可能的请求处理线程正在使用时传入连接请求的最大队列长度。队列满时收到的任何请求都将被拒绝。默认值是100。

注:为了能够验证内存的情况下,您可以连接到Tomcat使用JMX(JConsole的,jvisualvm,等...),而且,你可以查了很多实际的设置,如Monitoring Tomcat FAQ中所述。

+0

其他xmx选项和httpd.conf选项怎么样? – Olzh

+0

@Olzh:你有证据证明堆满了吗?在这方面,通过JMX进行连接显示的是什么?如果您打开GC日志记录,它会显示什么内容? – ppeterka

+0

我已经增加到1500,明天会是大会议,如何检查是否使用这个参数是tomcat – Olzh