Просмотр исходного кода

Merge pull request 'Log xs_socket_accept failure reason and document OpenBSD login class w/ extended openfiles' (#559) from oxzi/snac2:openbsd-openfiles-nfiles into master

Reviewed-on: https://codeberg.org/grunfink/snac2/pulls/559
grunfink 5 месяцев назад
Родитель
Сommit
e1e64ac0af
3 измененных файлов с 45 добавлено и 2 удалено
  1. 35 0
      doc/snac.8
  2. 7 0
      examples/snac_openbsd_login_conf
  3. 3 2
      httpd.c

+ 35 - 0
doc/snac.8

@@ -704,6 +704,41 @@ out there. If you want your language file to be included in the standard
 .Nm
 distribution, please send me a link to it via the Fediverse to @grunfink@comam.es
 or make a PR via the Git repository.
+.Ss Number of open files on OpenBSD and login classes
+Being a file intensive application, even a small
+.Nm
+instance might open lots of files, especially when forwarding a new post to
+other instances.
+.Pp
+OpenBSD's daemon login class comes with a very low
+.Pa openfiles
+value, usually restricting the amount of open files to 128 (cur), 1024 (max).
+This can result in
+.Nm
+to stop working due to too many open files.
+.Pp
+To continue operation, a new
+.Pa snac
+login class can be created. Please consult
+.Xr login.conf 5
+and afterwards create a new login class as follows.
+.Bd -literal -offset indent
+snac:\\
+    :openfiles=4096:\\
+    :tc=daemon:
+.Ed
+.Pp
+After rebuilding the
+.Pa /etc/login.conf.db ,
+ensure that your snac user's login class is set to
+.Pa snac :
+.Bd -literal -offset indent
+# cap_mkdb /etc/login.conf
+# usermod -L snac SNACUSER
+.Ed
+.Pp
+One restart later, the daemon should run with increased
+.Pa openfiles .
 .Sh ENVIRONMENT
 .Bl -tag -width Ds
 .It Ev DEBUG

+ 7 - 0
examples/snac_openbsd_login_conf

@@ -0,0 +1,7 @@
+# OpenBSD login.conf(5) entry to increase the openfiles for the snac login
+# class. Further documented under "Number of open files on OpenBSD and login
+# classes" in snac(8).
+
+snac:\
+	:openfiles=4096:\
+	:tc=daemon:

+ 3 - 2
httpd.c

@@ -1116,9 +1116,10 @@ void httpd(void)
                 FILE *f = fdopen(cs, "r+");
                 xs *job = xs_data_new(&f, sizeof(FILE *));
                 job_post(job, 1);
-            }
-            else
+            } else {
+                srv_log(xs_fmt("error: xs_socket_accept failed: %s", strerror(errno)));
                 break;
+            }
         }
     }