我试图对Linux CentOS 5.5上的sunrpc.tcp_slot_table_entries进行持续更改。 这个值对于我们的NFS客户端的性能非常重要,并且必须在NFS挂载完成之前设置。
简单地把值放在/etc/sysctl.conf中不起作用,因为在加载sunrpc模块之前执行/etc/rc.d/rc.sysinit (执行sysctl -p)。
与RHEL 4相同的问题:
我尝试过了:
/etc/modprobe.conf (和/etc/modprobe.d/sunrpc )中install sunrpc /sbin/modprobe -q --ignore-install sunrpc;/sbin/sysctl -w sunrpc.tcp_slot_table_entries=64 SUBSYSTEM=="module" ACTION=="add" DEVPATH=="*/sunrpc" RUN+="/sbin/sysctl -w sunrpc.tcp_slot_table_entries=64"放置SUBSYSTEM=="module" ACTION=="add" DEVPATH=="*/sunrpc" RUN+="/sbin/sysctl -w sunrpc.tcp_slot_table_entries=64" (也许必须更改为CentOS 5) /etc/udev/rules.d/23-sunrpc.rules但无济于事。 而且我不想修改/etc/init.d/netfs (来自initscripts包)。
那么,你有没有在CentOS 5上成功做到这一点,如果是的话,怎么样?
编辑:在/etc/modprobe.d/modprobe.conf.distfind:
install sunrpc /sbin/modprobe --first-time --ignore-install sunrpc && { /bin/mount -t rpc_pipefs sunrpc /var/lib/nfs/rpc_pipefs > /dev/null 2>&1 || :; }
这也许是为什么我自己对modprobe的补充没有考虑到。 但我不确定是否应该直接修改该文件,因为它可能会被module-init-tools更新覆盖…
最后,我在S15(参见/etc/rc3.d/)中创build了一个几乎虚拟的初始化脚本,因为该模块在S14(nfslock)中加载并在S25(netfs)中使用。
/etc/init.d/sunrpc_tuning :
#!/bin/sh # # sunrpc_tuning Tunes /proc/sys/sunrpc (launched after lockd) # # chkconfig: 345 15 85 # description: set values to sunrpc after module is loaded # probe: true case "$1" in start) echo "Setting sunrpc.tcp_slot_table_entries ..." /sbin/sysctl -w sunrpc.tcp_slot_table_entries=128 ;; *) ;; esac
然后: chkconfig --add sunrpc_tuning
我正在运行RHEL5.4,似乎以某种方式sysfsl.conf设置正在应用(以某种方式?)之前netfs挂载卷。 你是怎么validation的?
我修改了netfs initscript,在执行nfs挂载之前写入了sunrpc.tcp_slot_table_entries的值,并且写出了'128'和默认的'16'。
start) # Let udev handle any backlog before trying to mount file systems /sbin/udevsettle --timeout=30 [ -n "$NFSFSTAB" ] && { [ ! -f /var/lock/subsys/portmap ] && service portmap start /sbin/sysctl sunrpc.tcp_slot_table_entries >> /tmp/sunrpc action $"Mounting NFS filesystems: " mount -a -t nfs,nfs4
您可以在/etc/rc.d/rc.local放入/sbin/sysctl -w sunrpc.tcp_slot_table_entries=64 。
我尝试了一些类似于David142的尝试,这是在RedHat 6.3系统上,但是我发现,即使在S15或S20,由于sunrpc内核模块没有加载,它仍然没有被设置。 即使S52netfs启动并尝试执行sysctl -p,也会失败。
我试过的修复与您的修复类似,但是我添加了一个modprobe命令:
#!/bin/bash # # set_nfs_parms Set kernel parmeters for NFS # # chkconfig: 235 15 85 # description: At boot time, sunrpc.tcp_slot_table_entries cannot be set since # the nfs module is not loaded. This sets it later in the boot # sequence. # # Source function library. . /etc/rc.d/init.d/functions case "$1" in start) #/sbin/sysctl -w sunrpc.tcp_slot_table_entries=128 /sbin/modprobe sunrpc /sbin/sysctl -p ;; stop) ;; *) echo $"Usage: $0 {start}" exit 2 esac exit $?
之后,参数似乎可靠地得到设置后重新启动。