systemdを使用して多くのサービスのオープンファイル制限を制御するのは非常に簡単です。 /etc/systemd/system/$service_name.service.d/limits.confにファイルを作成し、[Service]
含まれているセクションを追加して実行し、LimitNOFILE=12345
サービスsystemctl daemon-reload
を再起動してダブルクリックします。/proc/$pid/limits
確認するために。
しかし、デフォルトの1024/4096を超えるオープンファイル制限を持つnfsdプロセスを取得することはできません。 512個のスレッドに対してNFSを設定したのでkthreadd
(PID 2)、512個のnfsdプロセスが実行されます。
出力は次のとおりですsystemctl cat nfs
。
# /usr/lib/systemd/system/nfs-server.service
[Unit]
Description=NFS server and services
DefaultDependencies=no
Requires= network.target proc-fs-nfsd.mount
Requires= nfs-mountd.service
Wants=rpcbind.socket network-online.target
Wants=rpc-statd.service nfs-idmapd.service
Wants=rpc-statd-notify.service
After= network-online.target local-fs.target
After= proc-fs-nfsd.mount rpcbind.socket nfs-mountd.service
After= nfs-idmapd.service rpc-statd.service
Before= rpc-statd-notify.service
# GSS services dependencies and ordering
Wants=auth-rpcgss-module.service
After=rpc-gssd.service gssproxy.service
Wants=nfs-config.service
After=nfs-config.service
[Service]
EnvironmentFile=-/run/sysconfig/nfs-utils
Type=oneshot
RemainAfterExit=yes
ExecStartPre=-/usr/sbin/exportfs -r
ExecStartPre=-/bin/sh -c '/bin/kill -HUP `cat /run/gssproxy.pid`'
ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS
ExecStop=/usr/sbin/rpc.nfsd 0
ExecStopPost=/usr/sbin/exportfs -au
ExecStopPost=/usr/sbin/exportfs -f
ExecReload=-/usr/sbin/exportfs -r
[Install]
WantedBy=multi-user.target
# /run/systemd/generator/nfs-server.service.d/order-with-mounts.conf
# Automatically generated by nfs-server-generator
[Unit]
RequiresMountsFor=/mnt/files
# /etc/systemd/system/nfs-server.service.d/override.conf
[Service]
LimitNOFILE=infinity
ご覧のとおり、無限大LimitNOFILE
(cat /proc/sys/fs/file-max
生成7171636
)に設定しようとしています。
しかし:
# cat /proc/$(pidof -s nfsd)/limits | grep files
Max open files 1024 4096 files
また、SELinuxが無効になります。
Amazon Linux 2 LTS リリース候補は次のとおりです。
# cat /proc/version
Linux version 4.9.62-10.57.amzn2.x86_64 (mockbuild@ip-10-0-1-120) (gcc version 7.2.1 20170915 (Red Hat 7.2.1-2) (GCC) ) #1 SMP Wed Dec 6 00:07:49 UTC 2017
プロセスごとに開かれたファイル制限がどこから来るのかを知っている人はいますか?どのように変更できますか?
ベストアンサー1
からman rpc.nfsd
:
rpc.nfsd プログラムは、NFS サービスのユーザーレベル部分を実装します。主な機能はnfsdカーネルモジュールによって処理されます。ユーザー空間プログラムは、カーネルサービスが受信する必要があるソケットの種類、サポートする必要があるNFSバージョン、および使用する必要があるカーネルスレッドの数を指定します。
実際のnfsd
プロセスはカーネルによって開始されるので(kthreadd
ご存知のように)子プロセスではないので(またはn次孫プロセスも)増加するsystemd
ulimitsystemd
値を渡すことはできません。