f65af0
From f9d883b97b24efaf82e510601a4711bc9c0ea9c7 Mon Sep 17 00:00:00 2001
979ee0
From: Christian Heimes <cheimes@redhat.com>
979ee0
Date: Thu, 14 Jun 2018 17:04:13 +0200
979ee0
Subject: [PATCH] Increase WSGI process count to 5 on 64bit
979ee0
979ee0
Increase the WSGI daemon worker process count from 2 processes to 5
979ee0
processes. This allows IPA RPC to handle more parallel requests. The
979ee0
additional processes increase memory consumption by approximante 250 MB
979ee0
in total.
979ee0
979ee0
Since memory is scarce on 32bit platforms, only 64bit platforms are
979ee0
bumped to 5 workers.
979ee0
979ee0
Fixes: https://pagure.io/freeipa/issue/7587
979ee0
Signed-off-by: Christian Heimes <cheimes@redhat.com>
979ee0
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
979ee0
---
979ee0
 install/conf/ipa.conf               | 2 +-
979ee0
 ipaplatform/base/constants.py       | 5 +++++
979ee0
 ipaserver/install/httpinstance.py   | 1 +
979ee0
 ipaserver/install/server/upgrade.py | 3 ++-
979ee0
 4 files changed, 9 insertions(+), 2 deletions(-)
979ee0
979ee0
diff --git a/install/conf/ipa.conf b/install/conf/ipa.conf
f65af0
index 696e5aab1aca1875eb711b91351f41987a8379d1..912a63c2240e0681dfbeeac223a902b15b304716 100644
979ee0
--- a/install/conf/ipa.conf
979ee0
+++ b/install/conf/ipa.conf
f65af0
@@ -47,7 +47,7 @@ WSGISocketPrefix /run/httpd/wsgi
979ee0
 
979ee0
 
979ee0
 # Configure mod_wsgi handler for /ipa
979ee0
-WSGIDaemonProcess ipa processes=2 threads=1 maximum-requests=500 \
979ee0
+WSGIDaemonProcess ipa processes=$WSGI_PROCESSES threads=1 maximum-requests=500 \
f65af0
   user=ipaapi group=ipaapi display-name=%{GROUP} socket-timeout=2147483647 \
f65af0
   lang=C.UTF-8 locale=C.UTF-8
979ee0
 WSGIImportScript /usr/share/ipa/wsgi.py process-group=ipa application-group=ipa
979ee0
diff --git a/ipaplatform/base/constants.py b/ipaplatform/base/constants.py
f65af0
index ca4a12ec017e81b32dc796062608a96ce65a0235..075a3ba774e1286e50258b464bd7687d484f6029 100644
979ee0
--- a/ipaplatform/base/constants.py
979ee0
+++ b/ipaplatform/base/constants.py
979ee0
@@ -5,9 +5,11 @@
979ee0
 '''
979ee0
 This base platform module exports platform dependant constants.
979ee0
 '''
979ee0
+import sys
979ee0
 
979ee0
 
979ee0
 class BaseConstantsNamespace(object):
979ee0
+    IS_64BITS = sys.maxsize > 2 ** 32
979ee0
     DS_USER = 'dirsrv'
979ee0
     DS_GROUP = 'dirsrv'
979ee0
     HTTPD_USER = "apache"
f65af0
@@ -42,6 +44,9 @@ class BaseConstantsNamespace(object):
f65af0
     # WSGI module override, only used on Fedora
f65af0
     MOD_WSGI_PYTHON2 = None
f65af0
     MOD_WSGI_PYTHON3 = None
979ee0
+    # WSGIDaemonProcess process count. On 64bit platforms, each process
979ee0
+    # consumes about 110 MB RSS, from which are about 35 MB shared.
979ee0
+    WSGI_PROCESSES = 5 if IS_64BITS else 2
f65af0
 
f65af0
 
f65af0
 constants = BaseConstantsNamespace()
979ee0
diff --git a/ipaserver/install/httpinstance.py b/ipaserver/install/httpinstance.py
f65af0
index 231bffa2c6ec1fd124738649912e4bd958e802b7..3764870ee77f2ba0da18ec004664e6f66c13bba1 100644
979ee0
--- a/ipaserver/install/httpinstance.py
979ee0
+++ b/ipaserver/install/httpinstance.py
f65af0
@@ -148,6 +148,7 @@ class HTTPInstance(service.Service):
979ee0
             DOMAIN=self.domain,
979ee0
             AUTOREDIR='' if auto_redirect else '#',
979ee0
             CRL_PUBLISH_PATH=paths.PKI_CA_PUBLISH_DIR,
979ee0
+            WSGI_PROCESSES=constants.WSGI_PROCESSES,
979ee0
         )
979ee0
         self.ca_file = ca_file
979ee0
         if ca_is_configured is not None:
979ee0
diff --git a/ipaserver/install/server/upgrade.py b/ipaserver/install/server/upgrade.py
f65af0
index ab09b98406df251f769c4747c9250075ab610362..ee3cedd78a2f45f33665bf562e9426cf68325544 100644
979ee0
--- a/ipaserver/install/server/upgrade.py
979ee0
+++ b/ipaserver/install/server/upgrade.py
f65af0
@@ -1681,7 +1681,8 @@ def upgrade_configuration():
979ee0
         AUTOREDIR='' if auto_redirect else '#',
979ee0
         CRL_PUBLISH_PATH=paths.PKI_CA_PUBLISH_DIR,
979ee0
         DOGTAG_PORT=8009,
979ee0
-        CLONE='#'
979ee0
+        CLONE='#',
979ee0
+        WSGI_PROCESSES=constants.WSGI_PROCESSES,
979ee0
     )
979ee0
 
979ee0
     subject_base = find_subject_base()
979ee0
-- 
f65af0
2.14.4
979ee0