Skip to content
Snippets Groups Projects
Commit c3eb7dd9 authored by Erik Johnston's avatar Erik Johnston
Browse files

Add config option to set the soft fd limit on start

parent 63c1f4fa
No related branches found
No related tags found
No related merge requests found
...@@ -52,6 +52,7 @@ import synapse ...@@ -52,6 +52,7 @@ import synapse
import logging import logging
import os import os
import re import re
import resource
import subprocess import subprocess
import sqlite3 import sqlite3
import syweb import syweb
...@@ -269,6 +270,15 @@ def get_version_string(): ...@@ -269,6 +270,15 @@ def get_version_string():
return ("Synapse/%s" % (synapse.__version__,)).encode("ascii") return ("Synapse/%s" % (synapse.__version__,)).encode("ascii")
def change_resource_limit(soft_file_no):
try:
soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
resource.setrlimit(resource.RLIMIT_NOFILE, (soft_file_no, hard))
logger.info("Set file limit to: %d", soft_file_no)
except (ValueError, resource.error) as e:
logger.warn("Failed to set file limit: %s", e)
def setup(): def setup():
config = HomeServerConfig.load_config( config = HomeServerConfig.load_config(
"Synapse Homeserver", "Synapse Homeserver",
...@@ -345,10 +355,11 @@ def setup(): ...@@ -345,10 +355,11 @@ def setup():
if config.daemonize: if config.daemonize:
print config.pid_file print config.pid_file
daemon = Daemonize( daemon = Daemonize(
app="synapse-homeserver", app="synapse-homeserver",
pid=config.pid_file, pid=config.pid_file,
action=run, action=lambda: run(config),
auto_close_fds=False, auto_close_fds=False,
verbose=True, verbose=True,
logger=logger, logger=logger,
...@@ -356,11 +367,14 @@ def setup(): ...@@ -356,11 +367,14 @@ def setup():
daemon.start() daemon.start()
else: else:
reactor.run() run(config)
def run(): def run(config):
with LoggingContext("run"): with LoggingContext("run"):
if config.soft_file_limit:
change_resource_limit(config.soft_file_limit)
reactor.run() reactor.run()
......
...@@ -31,6 +31,7 @@ class ServerConfig(Config): ...@@ -31,6 +31,7 @@ class ServerConfig(Config):
self.webclient = True self.webclient = True
self.manhole = args.manhole self.manhole = args.manhole
self.no_tls = args.no_tls self.no_tls = args.no_tls
self.soft_file_limit = args.soft_file_limit
if not args.content_addr: if not args.content_addr:
host = args.server_name host = args.server_name
...@@ -77,6 +78,12 @@ class ServerConfig(Config): ...@@ -77,6 +78,12 @@ class ServerConfig(Config):
"content repository") "content repository")
server_group.add_argument("--no-tls", action='store_true', server_group.add_argument("--no-tls", action='store_true',
help="Don't bind to the https port.") help="Don't bind to the https port.")
server_group.add_argument("--soft-file-limit", type=int, default=0,
help="Set the limit on the number of file "
"descriptors synapse can use. Zero "
"is used to indicate synapse should "
"not change the limit from system "
"default.")
def read_signing_key(self, signing_key_path): def read_signing_key(self, signing_key_path):
signing_keys = self.read_file(signing_key_path, "signing_key") signing_keys = self.read_file(signing_key_path, "signing_key")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment