1. 程式人生 > 實用技巧 >Linux 程序開啟最大檔案連線數Too many open files

Linux 程序開啟最大檔案連線數Too many open files

首先出現這個提示的原因:應用程式開啟的檔案數量超過了系統設定值。

如何檢視當前系統每個使用者最大允許開啟檔案數量:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@registry ~]# ulimit -a corefilesize (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 filesize (blocks, -f) unlimited pending signals (-i) 3820 max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited openfiles (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-timepriority (-r) 0 stack size (kbytes, -s) 8192 cputime(seconds, -t) unlimited max user processes (-u) 3820 virtual memory (kbytes, -v) unlimited filelocks (-x) unlimited

或者

1 2 [root@registry ~]# ulimit -n 1024  

其中open files (-n) 1024表示每個使用者最大允許開啟的檔案數量是1024

#檢視一下當前已有的連線數,以此來判斷open files 為1024 是否足夠

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 [root@registry ~]# lsof -n |awk '{print$2}'|sort |uniq -c |sort -nr |more
590 5458 445 1065 306 638 267 770 190 5682 189 5457 158 704 130 1194 117 681 81 1263 68 5419 66 640 62 1 60 5677 57 678 55 1067 51 9036 51 1196 48 5698 44 677 44 470 38 494 32 637 29 4430 20 4614 17 9250 14 4566 12 9256 12 9251 11 9254 11 9252 10 9255 10 693 9 9253 3 92 3 9037 3 9033 3 9 3 8964 3 8 3 726

其中第一列是開啟的檔案控制代碼數量,第二列是程序id號

通過控制代碼數量最多的程序,檢視是哪個應用程式打開了最多的檔案控制代碼,通過命令:

1 [root@registry ~]# ps -aef |grep PID

設定open files 數值的方法

1.臨時設定方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@registry ~]# ulimit -n 4096 [root@registry ~]# ulimit -a corefilesize (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 filesize (blocks, -f) unlimited pending signals (-i) 3820 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited openfiles (-n) 4096 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-timepriority (-r) 0 stack size (kbytes, -s) 8192 cputime(seconds, -t) unlimited max user processes (-u) 3820 virtual memory (kbytes, -v) unlimited filelocks (-x) unlimited

這樣就可以把當前使用者的最大允許開啟檔案數量設定為4096,但這種設定方法在重啟後會還原為預設值。

2.永久設定方法

1 2 3 4 5 6 [root@registry ~]# vim /etc/security/limits.conf # End of file root soft nofile 65535 root hard nofile 65535 * soft nofile 65535 * hard nofile 65535

在檔案末尾新增上述四行,其中後面兩行的 * 表示所有的使用者,也可以根據需要設定某一個使用者,比如www

1 2 3 4 5 # End of file root soft nofile 65535 root hard nofile 65535 www soft nofile 65535 www hard nofile 65535

登出賬戶,重新登入即可生效。 

如果想檢視某個程序最大允許開啟的檔案數量,可通過如下命令檢視:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 [root@registry ~]# top top- 15:39:21 up 101 days, 6:26, 1 user, load average: 0.33, 0.57, 0.52 Tasks: 70 total, 1 running, 69 sleeping, 0 stopped, 0 zombie %Cpu(s): 6.7 us, 0.0 sy, 0.0 ni, 93.3id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 3881824 total, 111956free, 3505012 used, 264856 buff/cache KiB Swap: 2047996 total, 1001156free, 1046840 used. 123968 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12872 www 20 0 2738092 743948 2292 S 6.7 19.2 652:05.43 java 1 root 20 0 43380 2244 1352 S 0.0 0.1 4:11.26 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.31 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 28:18.97 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 33:52.08 rcu_sched 10 root rt 0 0 0 0 S 0.0 0.0 0:39.61 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 14 root 20 0 0 0 0 S 0.0 0.0 0:07.72 khungtaskd 15 root 0 -20 0 0 0 S 0.0 0.0 0:00.18 writeback 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md 25 root 20 0 0 0 0 S 0.0 0.0 12:21.57 kswapd0 26 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd 27 root 39 19 0 0 0 S 0.0 0.0 0:17.32 khugepaged 28 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 crypto 36 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kthrotld 38 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kmpath_rdacd 39 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kpsmoused 40 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ipv6_addrconf 59 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 deferwq 101 root 20 0 0 0 0 S 0.0 0.0 0:03.48 kauditd 225 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ata_sff 233 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_0 234 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 scsi_tmf_0 235 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_1 236 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 scsi_tmf_1 240 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ttm_swap 252 root 0 -20 0 0 0 S 0.0 0.0 1:07.64 kworker/0:1H 257 root 20 0 0 0 0 S 0.0 0.0 3:12.26 jbd2/vda1-8 258 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 ext4-rsv-conver 325 root 20 0 119080 5460 5316 S 0.0 0.1 5:27.58 systemd-journal 354 root 20 0 44032 8 4 S 0.0 0.0 0:00.08 systemd-udevd [root@registry ~]# cat /proc/12872/limits Limit Soft Limit Hard Limit Units Max cputimeunlimited unlimited seconds Maxfilesize unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max corefilesize 0 unlimited bytes Max residentsetunlimited unlimited bytes Max processes 65535 65535 processes Maxopenfiles 65535 65535 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Maxfilelocks unlimited unlimited locks Max pending signals 15089 15089 signals Max msgqueue size 819200 819200 bytes Maxnicepriority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us