httpd [apache 2.4] 内存泄漏问题

Posted

技术标签:

【中文标题】httpd [apache 2.4] 内存泄漏问题【英文标题】:httpd [apache 2.4] memory leak issue 【发布时间】:2018-10-10 05:17:43 【问题描述】:

问题描述: 在我们的性能环境中,我们观察到httpd 内存使用量在一段时间内不断增加,httpd 进程内存使用量会在 10 小时内从 6MB 增加到 1GB,并且在停止加载后,进程的内存使用量不会下降到它开始的 6 MB。

所选组件的版本号(如果适用): 使用带有 RHEL 7.4 的 httpd-2.4.6-67.el7_4.6.x86_64

如何重现: 每秒触发 1000 个 HTTP 请求

复制步骤:

实际结果:

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 12314 notifs    20   0 5723112 2.101g    104 S 129.4 17.9 785:17.34 java                              
12582 notifs    20   0 5727148 2.082g      4 S 117.6 17.7 782:13.72 java                              
15509 notifs    20   0 3767700 1.009g    500 S  11.8  8.6  78:27.08 httpd                             
15511 notifs    20   0 3527984 984116    524 S  11.8  8.0  77:25.43 httpd                             
15510 notifs    20   0 3640620 964676    552 S  11.8  7.8  75:20.43 httpd                             
15504 notifs    20   0   77460    764    532 S   0.0  0.0   0:02.40 httpd  

(注意 httpd 以 ~6 MB 开始,10 多小时后达到 ~1GB)。

预期结果:

没有这样的内存泄漏

附加信息:

系统 (VM) 配置有 12 GB 主内存和 4 GB 交换空间,httpd 吃掉了所有这些。

httpd 仅在 10180 (HTTP) 上侦听

【问题讨论】:

你请求1000次的页面是做什么的?每个 Apache 使用的模块是什么?什么服务器端技术。如果您请求静态文件与动态文件有区别吗?缺少很多元素来完全理解这个问题。 另外,如果完全不涉及编程,这是serverfault.com的问题 【参考方案1】:
List of Module :- 

LoadModule authz_host_module /usr/lib64/httpd/modules/mod_authz_host.so
LoadModule authz_core_module /usr/lib64/httpd/modules/mod_authz_core.so
LoadModule log_config_module /usr/lib64/httpd/modules/mod_log_config.so
LoadModule headers_module /usr/lib64/httpd/modules/mod_headers.so
LoadModule setenvif_module /usr/lib64/httpd/modules/mod_setenvif.so
LoadModule mime_module /usr/lib64/httpd/modules/mod_mime.so
LoadModule alias_module /usr/lib64/httpd/modules/mod_alias.so
LoadModule lbmethod_byrequests_module /usr/lib64/httpd/modules/mod_lbmethod_byrequests.so
LoadModule lbmethod_bytraffic_module /usr/lib64/httpd/modules/mod_lbmethod_bytraffic.so
LoadModule slotmem_shm_module /usr/lib64/httpd/modules/mod_slotmem_shm.so

LoadModule proxy_module /usr/lib64/httpd/modules/mod_proxy.so
LoadModule proxy_connect_module /usr/lib64/httpd/modules/mod_proxy_connect.so
LoadModule proxy_http_module /usr/lib64/httpd/modules/mod_proxy_http.so
LoadModule proxy_balancer_module /usr/lib64/httpd/modules/mod_proxy_balancer.so

LoadModule access_compat_module /usr/lib64/httpd/modules/mod_access_compat.so
LoadModule mpm_worker_module /usr/lib64/httpd/modules/mod_mpm_worker.so
LoadModule unixd_module  /usr/lib64/httpd/modules/mod_unixd.so
LoadModule socache_shmcb_module  /usr/lib64/httpd/modules/mod_socache_shmcb.so

we are pumping post dynamic request from back-end server towards Apache server. 

Note :- same scenario was working in SLES 11 with apache 2.2 , but no`enter code here`w we are upgraded to RHEL 7.4 with apache 2.4 where we starting facing issue .

thanks in advance 

【讨论】:

以上是关于httpd [apache 2.4] 内存泄漏问题的主要内容,如果未能解决你的问题,请参考以下文章

使用ulimit防止Apache内存泄漏

在 Apache httpd 进程中定位内存泄漏,基于 PHP/Doctrine 的应用程序

apache编译安装 httpd 2.2 httpd 2.4

apache-httpd2.4编译安装

Apache httpd-2.4 相关文件

Apache 2.4 忽略 httpd-vhosts.conf 文件