From c7446906bdd2e30e5e830a77c05ab9a15aece254 Mon Sep 17 00:00:00 2001
From: realtyem <realtyem@gmail.com>
Date: Fri, 14 Oct 2022 07:29:49 -0500
Subject: [PATCH] Set LD_PRELOAD to load jemalloc in Dockerfile-workers.
 (#14182)

---
 changelog.d/14182.docker              |  1 +
 docker/configure_workers_and_start.py | 12 +++++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)
 create mode 100644 changelog.d/14182.docker

diff --git a/changelog.d/14182.docker b/changelog.d/14182.docker
new file mode 100644
index 0000000000..a0ce1bce53
--- /dev/null
+++ b/changelog.d/14182.docker
@@ -0,0 +1 @@
+Set LD_PRELOAD to use jemalloc memory allocator in Dockerfile-workers.
diff --git a/docker/configure_workers_and_start.py b/docker/configure_workers_and_start.py
index d708237f69..4d78453418 100755
--- a/docker/configure_workers_and_start.py
+++ b/docker/configure_workers_and_start.py
@@ -39,6 +39,7 @@
 # continue to work if so.
 
 import os
+import platform
 import subprocess
 import sys
 from pathlib import Path
@@ -632,14 +633,23 @@ def main(args: List[str], environ: MutableMapping[str, str]) -> None:
         with open(mark_filepath, "w") as f:
             f.write("")
 
+    # Lifted right out of start.py
+    jemallocpath = "/usr/lib/%s-linux-gnu/libjemalloc.so.2" % (platform.machine(),)
+
+    if os.path.isfile(jemallocpath):
+        environ["LD_PRELOAD"] = jemallocpath
+    else:
+        log("Could not find %s, will not use" % (jemallocpath,))
+
     # Start supervisord, which will start Synapse, all of the configured worker
     # processes, redis, nginx etc. according to the config we created above.
     log("Starting supervisord")
-    os.execl(
+    os.execle(
         "/usr/local/bin/supervisord",
         "supervisord",
         "-c",
         "/etc/supervisor/supervisord.conf",
+        environ,
     )
 
 
-- 
GitLab