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