Commit b2e8e825 authored by Levin Zimmermann's avatar Levin Zimmermann

ERP5/zopewsgi: Add option to set soft limit of open file descriptors to hard limit

The default soft limit of open file descriptors is usually set to 1024
in order to avoid breaking old software which still uses select. In many
projects we may need a higher limit: particularly in Wendelin based
projects we easily reach this limit. Before this patch it was therefore
necessary to either patch ERP5 in the project specific SR or to manually
increase the limit of the zope processes (or the parent supervisor) with
a tool like prlimit [1]. With this patch it becomes possible to increase the
soft limit to the hard limit with a command line argument of the zopewsgi bin.
This simplifies setting the soft limit for any Wendelin project.

[1] https://man7.org/linux/man-pages/man1/prlimit.1.html

/reviewed-by @vpelletier, @jerome
/reviewed-on nexedi/erp5!1827

---

NOTE wind commit:

We cherry-pick commit nexedi/erp5@39369169
for Mic.Wind, to automatically avoid the open file descriptors limit
issue.
parent 79fa584e
......@@ -4,6 +4,7 @@ from io import BytesIO
import logging
import os
import posixpath
import resource
import signal
import socket
import sys
......@@ -164,6 +165,10 @@ def runwsgi():
parser.add_argument('address', help='<ip>:<port>')
parser.add_argument('zope_conf', help='path to zope.conf')
parser.add_argument('--timerserver-interval', help='Interval for timerserver', type=float)
parser.add_argument(
'--nofile',
help='Set soft limit of file descriptors erp5 can open to hard limit',
action="store_true")
args = parser.parse_args()
startup = os.path.dirname(Zope2.Startup.__file__)
......@@ -186,6 +191,11 @@ def runwsgi():
interval=args.timerserver_interval,
)
if args.nofile:
cur_limit = resource.getrlimit(resource.RLIMIT_NOFILE)
new_limit = (cur_limit[1], cur_limit[1])
resource.setrlimit(resource.RLIMIT_NOFILE, new_limit)
ip, port = splitport(args.address)
port = int(port)
createServer(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment