From f9d883b97b24efaf82e510601a4711bc9c0ea9c7 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 696e5aab1aca1875eb711b91351f41987a8379d1..912a63c2240e0681dfbeeac223a902b15b304716 100644 --- a/install/conf/ipa.conf +++ b/install/conf/ipa.conf @@ -47,7 +47,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 \ lang=C.UTF-8 locale=C.UTF-8 WSGIImportScript /usr/share/ipa/wsgi.py process-group=ipa application-group=ipa diff --git a/ipaplatform/base/constants.py b/ipaplatform/base/constants.py index ca4a12ec017e81b32dc796062608a96ce65a0235..075a3ba774e1286e50258b464bd7687d484f6029 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" @@ -42,6 +44,9 @@ class BaseConstantsNamespace(object): # WSGI module override, only used on Fedora MOD_WSGI_PYTHON2 = None MOD_WSGI_PYTHON3 = None + # 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 constants = BaseConstantsNamespace() diff --git a/ipaserver/install/httpinstance.py b/ipaserver/install/httpinstance.py index 231bffa2c6ec1fd124738649912e4bd958e802b7..3764870ee77f2ba0da18ec004664e6f66c13bba1 100644 --- a/ipaserver/install/httpinstance.py +++ b/ipaserver/install/httpinstance.py @@ -148,6 +148,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 ab09b98406df251f769c4747c9250075ab610362..ee3cedd78a2f45f33665bf562e9426cf68325544 100644 --- a/ipaserver/install/server/upgrade.py +++ b/ipaserver/install/server/upgrade.py @@ -1681,7 +1681,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.14.4