1. 程式人生 > >Redis之sentinel檔案控制代碼過小解決方案

Redis之sentinel檔案控制代碼過小解決方案

異常說明

Increased maximum number of open files to 10032 (it was originally set to 1024).
翻譯:
將開啟檔案的最大數量增加到10032(它最初設定為1024)。

解決辦法

#設定單個使用者的最大操作檔案數
命令:ulimit -n 10032

原理以及ulimit命令使用

[[email protected] security]# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e
) 0 file size (blocks, -f) unlimited pending signals (-i) 30518 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 1024 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited [[email protected] security]# ulimit -n 10240
[[email protected] security]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 30518 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 10240 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 1024 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited [[email protected] security]# </font></font></font></font> 1. 命令用法 命 令:ulimit 功 能:控制shell程式的資源 語  法:ulimit [-aHS][-c <core檔案上限>][-d <資料節區大小>][-f <檔案大 小>][-m <記憶體大小>][-n <檔案數目>][-p <緩衝區大小>][-s <堆疊大小>][-t <CPU時間>][-u <程式數目>][-v <虛擬記憶體大小>] 補充說明:ulimit為shell內建指令,可用來控制shell執行程式的資源。 參  數: -a  顯示目前資源限制的設定。 -c <core檔案上限>  設定core檔案的最大值,單位為區塊。 -d <資料節區大小>  程式資料節區的最大值,單位為KB。 -f <檔案大小>  shell所能建立的最大檔案,單位為區塊。 -H  設定資源的硬性限制,也就是管理員所設下的限制。 -m <記憶體大小>  指定可使用記憶體的上限,單位為KB。 -n <檔案數目>  指定同一時間最多可開啟的檔案數。 -p <緩衝區大小>  指定管道緩衝區的大小,單位512位元組。 -s <堆疊大小>  指定堆疊的上限,單位為KB。 -S  設定資源的彈性限制。 -t <CPU時間>  指定CPU使用時間的上限,單位為秒。 -u <程序數目>  使用者最多可啟動的程序數目。 -v <虛擬記憶體大小>  指定可使用的虛擬記憶體上限,單位為KB。 2. 系統調優 如前所述, ulimit -a 用來顯示當前的各種使用者程序限制。 Linux對於每個使用者,系統限制其最大程序數。為提高效能,可以根據裝置資源情況, 設定各linux 使用者的最大程序數,下面我把某linux使用者的最大程序數設為10000個: ulimit -u 10000 對於需要做許多 socket 連線並使它們處於開啟狀態的 Java 應用程式而言, 最好通過使用 ulimit -n xx 修改每個程序可開啟的檔案數,預設值是 1024。 ulimit -n 4096 將每個程序可以開啟的檔案數目加大到4096,預設為1024 其他建議設定成無限制(unlimited)的一些重要設定是: 資料段長度:ulimit -d unlimited 最大記憶體大小:ulimit -m unlimited 堆疊大小:ulimit -s unlimited CPU 時間:ulimit -t unlimited 虛擬記憶體:ulimit -v unlimited    暫時地,適用於通過 ulimit 命令登入 shell 會話期間。 永久地,通過將一個相應的 ulimit 語句新增到由登入 shell 讀取的檔案中, 即特定於 shell 的使用者資原始檔,如: 1) 解除 Linux 系統的最大程序數和最大檔案開啟數限制: vi /etc/security/limits.conf # 新增如下的行 * soft noproc 11000 * hard noproc 11000 * soft nofile 4100 * hard nofile 4100 說明:* 代表針對所有使用者 noproc 是代表最大程序數 nofile 是代表最大檔案開啟數 2) 讓 SSH 接受 Login 程式的登入,方便在 ssh 客戶端檢視 ulimit -a 資源限制: a、vi /etc/ssh/sshd_config 把 UserLogin 的值改為 yes,並把 # 註釋去掉 b、重啟 sshd 服務: /etc/init.d/sshd restart 3) 修改所有 linux 使用者的環境變數檔案: vi /etc/profile ulimit -u 10000 ulimit -n 4096 ulimit -d unlimited ulimit -m unlimited ulimit -s unlimited ulimit -t unlimited ulimit -v unlimited /************************************** 有時候在程式裡面需要開啟多個檔案,進行分析,系統一般預設數量是1024,(用ulimit -a可以看到)對於正常使用是夠了,但是對於程式來講,就太少了。 修改2個檔案。 1) /etc/security/limits.conf vi /etc/security/limits.conf 加上: * soft nofile 8192 * hard nofile 20480 2) /etc/pam.d/login session required /lib/security/pam_limits.so ********** 另外確保/etc/pam.d/system-auth檔案有下面內容 session required /lib/security/$ISA/pam_limits.so 這一行確保系統會執行這個限制。 *********** 3) 一般使用者的.bash_profile #ulimit -n 1024 重新登陸ok 3. /proc目錄: 1)/proc目錄裡面包括很多系統當前狀態的引數,例如:引用 /proc/sys/fs/file-max /proc/sys/fs/inode-max 是對整個系統的限制,並不是針對使用者的; 2)proc目錄中的值可以進行動態的設定,若希望永久生效,可以修改/etc/sysctl.conf檔案,並使用下面的命令確認: # sysctl -p 例如增加: 引用 fs.file-max=xxx fs.inode-max=xxx