systemdを使用してnfsdで開くファイルの数を制限する方法

systemdを使用してnfsdで開くファイルの数を制限する方法

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

ご覧のとおり、無限大LimitNOFILEcat /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次孫プロセスも)増加するsystemdulimitsystemd値を渡すことはできません。

おすすめ記事