【问题标题】:httpd memory release is slowhttpd内存释放慢
【发布时间】:2012-10-04 09:51:17
【问题描述】:

我在 RHEL5 上使用带有 mod jk 1.2.28 的 httpd。 在 httpd 之后,我确实运行了 tomcat。从 httpd 到 tomcat 的连接是通过 ajp 连接器使用 modjk 进行的。 我只是在负载测试 httpd - 使用 JMeter,当我在 120 秒内同时从两个不同的 JVM 创建 2000 个用户时,httpd 内存使用率很高,当所有连接都缓慢释放时,httpd 内存释放非常慢。有时我确实需要重新启动 httpd 进程。当我重新启动 httpd 时,内存使用量立即下降。 在不重新启动 httpd 进程的情况下,我应该怎么做才能加快 httpd 内存释放? 在 workers.properties 和 httpd.conf 中是否有任何属性可以实现这一点?

请提供一些帮助。

提前致谢:)

【问题讨论】:

  • 为什么需要重启httpd进程?如果不这样做会怎样?
  • 有时会发生,该请求不会转发到应用服务器。这需要重新启动 httpd。
  • 啊,那么您对实际问题进行了任何故障排除吗?日志中有什么东西吗?你能在测试条件下复制这个问题吗?如果有,是什么条件触发的?
  • 当我确实增加了 web 服务器上的负载时,比如两台机器在 120 秒内有 2000 个用户,httpd 的内存使用率很高(如预期的那样),但是当连接被释放时(netstat 显示0 在端口 8009 上建立了 tcp 连接),内存释放非常缓慢。有时也观察到,httpd 没有响应,我们必须重新启动 httpd,它会立即释放内存
  • 你可以选择一期或另一期吗?很难同时谈论两件不同的事情。我们可以研究记忆,也可以研究无反应,但除非你有任何理由认为它们是相关的,否则试图同时谈论两者会让每个人都感到困惑。为什么不专注于真正给您带来问题的那个?

标签: apache httpd.conf mod-jk worker


【解决方案1】:

我的一个有趣的观察 -

tomcat server.xml 中的 maxThread 值较低,例如 200,httpd 变得无响应,我需要在运行 jmeter 负载测试后重新启动 httpd。测试完成后内存不会自动释放 8009 上的连接为 CLOSE_WAIT

tomcat server.xml中maxThread的值为2000,运行JMeter负载测试后无需重新启动httpd,因为内存在测试完成后自动释放 8009 上的连接是 LAST_ACK

我的 httpd.conf 如下。我不明白使用这两个 MPM 中的哪一个。因此,我需要修改 MaxClient 值。请帮助我不想重新启动 httpd 并且我不想要 maxThread 的高值。

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

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

【讨论】:

  • 在workers.properties中将socket_timeout设置为合适的值
  • 减少httpd.conf中MaxClient的值
猜你喜欢
  • 2011-01-10
  • 2017-05-01
  • 2013-08-02
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 2013-12-05
  • 2015-04-22
相关资源
最近更新 更多