systemdã®ãã¼ã¸ã§ã³
# systemd --version systemd 237
TL;DR
Service
ã«LimitNOFILE
ãè¨å®ããã¨è¯ãï¼ä»ã®ç¹å®ã®ãªã½ã¼ã¹ã«ã¤ãã¦ã®å¶éãã©ãããã«ããããã¨ãå¯è½ã§ãï¼
ããã¥ã¡ã³ã㯠man systemd.exec
ã§åç
§ã§ãã¾ã (ã¦ã§ãä¸ã¯ãããæ£ãããªã½ã¼ã¹ï¼ http://man7.org/linux/man-pages/man5/systemd.exec.5.html)ï¼
æåã®æ¤è¨¼
ç¾ç¶ç¢ºèª
ãã¹ãã®ããã«fileãéãã¾ããperlã®scriptï¼ã¤ãã§ã«procã®limit (/proc/{PID}/limits
ã®ä¸èº«) ãåºåãã:
#!/usr/bin/env perl use strict; use warnings; use feature qw/say/; open my $fh, '<', "/proc/$$/limits"; say do { local $/; <$fh> }; my @fhs; for (my $i = 0; $i <= 2000; $i++) { my $filename = "/tmp/test.${i}"; open my $fh, ">", $filename or die "$filename: $!"; push @fhs, $fh; }
ç¹ã«ä½ãèããã«systemdã®service fileãæ¸ãã¦ã¿ã¾ãï¼
[Unit] Description=test [Service] Type=oneshot WorkingDirectory=/tmp/test ExecStart=/usr/bin/perl run.pl [Install] WantedBy=multi-user.target
ã§ï¼å®è¡ãã¦ã¿ã¾ã
Starting test... Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 3841 3841 processes Max open files 1024 1048576 files Max locked memory 16777216 16777216 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 3841 3841 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us /tmp/test.1020: Too many open files at run.pl line 13, <$fh> line 1. test.service: Main process exited, code=exited, status=24/n/a test.service: Failed with result 'exit-code'. Failed to start test.
Too many open files
ã§æ»ã«ã¾ãï¼Max open files
ã¯1024ã®ããã§ããï¼ulimit -n
ã§è¡¨ç¤ºãããç¾ç¶ã®ããã©ã®å¤ã£ã½ãï¼
LimitNOFILE
ãè¨å®ãã¦ã¿ã
[Unit] Description=test [Service] Type=oneshot WorkingDirectory=/tmp/test ExecStart=/usr/bin/perl run.pl LimitNOFILE=65536 [Install] WantedBy=multi-user.target
LimitNOFILE=65536
ãserviceã®è¨å®ã«è¿½å ãã¦ã¿ã¾ãï¼ããã§scriptãå®è¡:
Starting test... Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 3841 3841 processes Max open files 65536 65536 files Max locked memory 16777216 16777216 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 3841 3841 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
Max open files
ã65536ã«ãªã£ã¦ã¾ããï¼ãããã§å®è¡ã«ã失æããªãï¼ãè¯ãã£ãè¯ãã£ãï¼
Starting test... Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 3841 3841 processes Max open files 10 10 files Max locked memory 16777216 16777216 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 3841 3841 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us /tmp/test.6: Too many open files at run.pl line 13, <$fh> line 1. test.service: Main process exited, code=exited, status=24/n/a test.service: Failed with result 'exit-code'. Failed to start test.
試ãã«LimitNOFILE=10
ã«ãã¦ã¿ãæ§åï¼éæ¹åã«ãã¡ããã¨çµãã¦ãããã¨ããããã¾ãï¼