【问题标题】:Apache Tomcat JVM Heapsize on Redhat 5 64 bit 32 RAM 2 quad core Xeon Performance problemsRedhat 5 64 位 32 RAM 2 四核 Xeon 上的 Apache Tomcat JVM Heapsize 性能问题
【发布时间】:2016-12-18 15:37:20
【问题描述】:

请帮我调整我的服务器 当一次连接数超过 500 时,我的 httpd 就会冻结并停止响应。

自 2008 年以来我一直使用相同的配置,现在添加了一些 RAM,现在我在两台服务器上各有 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 从 4000m 更改为 26g,希望这将允许在此过程中使用更多 RAM。但是没有看到它在top中使用超过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 一起使用。

【问题讨论】:

  • 当系统无响应时JVM会做什么?底层操作系统是做什么的?
  • JVM 是 64 位的吗?另外,1.6 有点老了,我有点担心安全问题...
  • JVM 工作,操作系统非常慢,第二台服务器用作网络会议。两个服务器操作系统都可以。
  • my httpd just freezes and stop responding. 好的,我很困惑……是 Tomcat 还是它前面的 Apache 导致了问题?
  • 是的,全部 64 位,我知道它很旧,并且在最近的将来会更新,但需要调整 apache 和堆大小以满足新的 ram 并给他们一些性能提升

标签: java apache tomcat jvm heap-size


【解决方案1】:

这很可能是您在 Tomcat 方面的问题

maxThreads="500"

在 server.xml... 提高它,这将允许更多的并发连接。

最大线程数

此连接器要创建的请求处理线程的最大数量,因此决定了可以处理的同时请求的最大数量。如果未指定,则此属性设置为 200。如果执行器与此连接器关联,则忽略此属性,因为连接器将使用执行器而不是内部线程池执行任务。

From Apache Tomcat documentation

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

acceptCount="100"

这使得另外 100 个客户端可以在队列中等待直到服务

acceptCount

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

注意:为了能够验证内存情况,你可以使用JMX(jconsole、jvisualvm等)连接Tomcat,另外,你可以检查很多实际设置,如Monitoring Tomcat FAQ 中所述。

【讨论】:

  • 其他 xmlx 选项和 httpd.conf 选项怎么样?
  • @Olzh:你有证据证明堆是满的吗?在这方面,通过 JMX 连接显示了什么?如果您打开了 GC 日志记录,它会显示什么?
  • 我已经增加到1500,明天会是大会话,如何检查tomcat是否使用了这个参数
  • @Olzh 只需通过 JMX 连接 - 您将能够看到发生了什么。
  • 不,这只是我的想法,几个月前我有一些日志要求增加堆大小。告诉我在哪里检查,谢谢你帮助我@ppeterka
猜你喜欢
  • 2011-12-12
  • 2023-03-21
  • 1970-01-01
  • 2012-07-23
  • 2010-10-28
  • 2011-06-26
  • 2012-03-19
  • 2010-11-27
  • 2011-06-08
相关资源
最近更新 更多