Apache 2.4.20 / mod_cluster 1.3.2 memory leak
j_sykora May 24, 2016 10:13 AMHi,
I have problem with memory leak in Apache 2.4 with native mod_cluster 1.3.2 on Solaris 10 (x64)
As I checked in prstat monitor there is memory growing in child process where STATUS request from mod_security is comming.
Memory is growing up till httpd server is restarted or all usable memory is consumed.
I found that same problem was also in older version od mod_cluster so I try to set workaround configuration (KeepAliveTimeout and MaxKeepAliveRequests)
to my config files but there was no affect.
Because I build Apache with mpms-shared so I tested it in prefork, work and also event mode of Apache. But situation is same in all modes.
Memory is growing up in child process which is used for STATUS request
Do you have an experience with similar problem on Apache 2.4 ?
H.
Env:
Apache/2.4.20 (Unix) OpenSSL/1.0.2h mod_cluster/1.3.2.Final configured
SunOS 5.10 Generic_150401-27 i86pc i386 i86pc
Apache server details:
Server version: Apache/2.4.20 (Unix)
Server built: May 23 2016 14:23:52
Server's Module Magic Number: 20120211:57
Server loaded: APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_PROC_PTHREAD_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/app01/apache2"
-D SUEXEC_BIN="/app01/apache2/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"
relevant information form httpd.conf:
#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule unique_id_module modules/mod_unique_id.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule security2_module modules/mod_security2.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule manager_module modules/mod_manager.so
LoadModule advertise_module modules/mod_advertise.so
LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
<IfModule ssl_module>
SSLPassPhraseDialog builtin
SSLSessionCache none
#SSLSessionCache "shmcb:/usr/local/apache2/logs/ssl_scache(512000)"
#SSLSessionCacheTimeout 300
#SSLMutex "file:/usr/local/apache2/logs/ssl_mutex"
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
#ErrorLog /usr/local/apache2/logs/ssl_engine.log
#LogLevel debug
</IfModule>
####### My config ########
Listen 0.0.0.0:80
Listen 0.0.0.0:443
Listen 0.0.0.0:6666
#NameVirtualHost *:443
#NameVirtualHost *:80
#NameVirtualHost *:6666
ServerName myServer
MaxNode 200
<IfModule prefork.c>
ServerLimit 100
MinSpareServers 5
MaxSpareServers 100
MaxRequestWorkers 100
</IfModule>
<IfModule worker.c>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 100
ThreadsPerChild 25
MaxRequestWorkers 500
</IfModule>
<IfModule event.c>
StartServers 2
ServerLimit 30
MinSpareThreads 25
MaxSpareThreads 100
AsyncRequestWorkerFactor 4
ThreadsPerChild 20
MaxRequestWorkers 400
</IfModule>
Config for VH of mod_cluster listener
PersistSlots on
<VirtualHost *:6666>
ServerName myServer
ServerAlias myServer
<Location />
Require all granted
</Location>
#KeepAlive off
KeepAliveTimeout 60
#MaxKeepAliveRequests 0
MaxKeepAliveRequests 200
EnableMCPMReceive Off
ServerAdvertise Off
CustomLog "|/usr/apache2/bin/rotatelogs /usr/apache2/logs/MC-access_6666_log-%Y-%m-%d 86400" combined
ErrorLog "|/usr/apache2/bin/rotatelogs /usr/apache2/logs/MC-error_6666_log-%Y-%m-%d 86400"
</VirtualHost>
Message was edited by: Jan Sykora
Message was edited by: Jan Sykora