From 6110a949aee9c98ab077c9cd907881ad82be5f45 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Thu, 14 Jun 2018 17:04:13 +0200 Subject: [PATCH] Increase WSGI process count to 5 on 64bit Increase the WSGI daemon worker process count from 2 processes to 5 processes. This allows IPA RPC to handle more parallel requests. The additional processes increase memory consumption by approximante 250 MB in total. Since memory is scarce on 32bit platforms, only 64bit platforms are bumped to 5 workers. Fixes: https://pagure.io/freeipa/issue/7587 Signed-off-by: Christian Heimes Reviewed-By: Alexander Bokovoy --- install/conf/ipa.conf | 2 +- ipaplatform/base/constants.py | 5 +++++ ipaserver/install/httpinstance.py | 1 + ipaserver/install/server/upgrade.py | 3 ++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/install/conf/ipa.conf b/install/conf/ipa.conf index 01bf9a4f97fc0cf197c0ad12743affa597b54911..34ced2ab9d91ae174a42a580e1c4f9436c1a8c3b 100644 --- a/install/conf/ipa.conf +++ b/install/conf/ipa.conf @@ -51,7 +51,7 @@ WSGISocketPrefix /run/httpd/wsgi # Configure mod_wsgi handler for /ipa -WSGIDaemonProcess ipa processes=2 threads=1 maximum-requests=500 \ +WSGIDaemonProcess ipa processes=$WSGI_PROCESSES threads=1 maximum-requests=500 \ user=ipaapi group=ipaapi display-name=%{GROUP} socket-timeout=2147483647 WSGIImportScript /usr/share/ipa/wsgi.py process-group=ipa application-group=ipa WSGIScriptAlias /ipa /usr/share/ipa/wsgi.py diff --git a/ipaplatform/base/constants.py b/ipaplatform/base/constants.py index dccb0e7191cb0d9644eb286b9ec061599afa3980..db250d9a40466e852453e7309c704a6897c6bcf8 100644 --- a/ipaplatform/base/constants.py +++ b/ipaplatform/base/constants.py @@ -5,9 +5,11 @@ ''' This base platform module exports platform dependant constants. ''' +import sys class BaseConstantsNamespace(object): + IS_64BITS = sys.maxsize > 2 ** 32 DS_USER = 'dirsrv' DS_GROUP = 'dirsrv' HTTPD_USER = "apache" @@ -28,3 +30,6 @@ class BaseConstantsNamespace(object): # nfsd init variable used to enable kerberized NFS SECURE_NFS_VAR = "SECURE_NFS" SSSD_USER = "sssd" + # WSGIDaemonProcess process count. On 64bit platforms, each process + # consumes about 110 MB RSS, from which are about 35 MB shared. + WSGI_PROCESSES = 5 if IS_64BITS else 2 diff --git a/ipaserver/install/httpinstance.py b/ipaserver/install/httpinstance.py index e68bfc09b34e087dfb4872b6565b06c6c2188384..7081c7418e76afbd1b4ae28deafefb6b264c62f0 100644 --- a/ipaserver/install/httpinstance.py +++ b/ipaserver/install/httpinstance.py @@ -152,6 +152,7 @@ class HTTPInstance(service.Service): DOMAIN=self.domain, AUTOREDIR='' if auto_redirect else '#', CRL_PUBLISH_PATH=paths.PKI_CA_PUBLISH_DIR, + WSGI_PROCESSES=constants.WSGI_PROCESSES, ) self.ca_file = ca_file if ca_is_configured is not None: diff --git a/ipaserver/install/server/upgrade.py b/ipaserver/install/server/upgrade.py index 793092be86da687fd21cf2c0ef3608f32fcf9f16..667b9d214ce76031b5d0f205e03ddb46178e9b2f 100644 --- a/ipaserver/install/server/upgrade.py +++ b/ipaserver/install/server/upgrade.py @@ -1615,7 +1615,8 @@ def upgrade_configuration(): AUTOREDIR='' if auto_redirect else '#', CRL_PUBLISH_PATH=paths.PKI_CA_PUBLISH_DIR, DOGTAG_PORT=8009, - CLONE='#' + CLONE='#', + WSGI_PROCESSES=constants.WSGI_PROCESSES, ) subject_base = find_subject_base() -- 2.17.1