系統調優:如何解決系統報錯too many open files瓶頸

1、檢查系統版本是否手工升級linux

[root@station253 ~]# uname -r   linux的內核版本號
2.6.32-358.el6.x86_64
[root@station253 ~]# cat /proc/version
Linux version 2.6.32-358.el6.x86_64 
[root@station253 ~]# cat /etc/issue  系統安裝時默認的發行版本
CentOS release 6.4 (Final)
[root@station253 ~]# cat /etc/redhat-release
CentOS release 6.4 (Final)
[root@station253 ~]# yum -y install redhat-lsb 
[root@station253 ~]# lsb_release -a 
LSB Version::base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID:CentOS
Description:CentOS release 6.4 (Final)
Release:6.4
Codename:Final

關於lsb_release -a和/etc/issue顯示的發行版本號不一樣,緣由只有一個:系統內核手動升級了。vim


對於高併發高http鏈接的應用程序例如www或Java,會趕上Socket/File: Can’t open so many files或too many open files的問題.bash

最好經過使用ulimit -n xx 修改每一個進程可打開的文件數,缺省值是1024,併發


2、如何增大用戶打開最大進程數ssh

ulimit -a 來顯示當前的各類用戶進程限制tcp

[root@station253 ~]# 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) 7777
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) 7777
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


系統原始文件ide

ulimit命令有分軟硬設置,加-H硬限制是實際的限制,加-S軟限制是warnning限制,只會作出warning;高併發

[root@station253 ~]# grep '^*' /etc/security/limits.conf
*    soft    65535
*    hard    65535


修改方法:性能

方法一:
1在/etc/rc.local中增長ulimit -SHn 65535
[root@station253 ~]# echo "ulimit -SHn 65535" >> /etc/rc.local 
2在/etc/profile中增長ulimit -SHu 65535
[root@station253 ~]# echo "ulimit -SHu 65535" >> /etc/profile 
而後source /etc/profile讓參數即時生效
方法二:修改limits.conf配置文件生效
nofile(可打開的文件描述符的最大數)和nproc(單個用戶可用的最大進程數量)
[root@station253 ~]# grep '^*' /etc/security/limits.conf
*    soft    nproc    65535
*    hard    nproc    65535
*    soft    nofile    65535
*    hard    nofile    65535
退出用戶終端從新登陸,使配置文件生效
[root@station253 ~]# ulimit -a
open files                      (-n) 65535
max user processes              (-u) 65535


用戶打開最大進程數還受此文件影響ui

limits.conf中的nproc受文件/etc/security/limits.d/90-nproc.conf中nproc值大小制約

[root@station253 ~]# egrep -v "^#|^$" /etc/security/limits.d/90-nproc.conf

*          soft    nproc     1024

root       soft    nproc     unlimited

修改全部用戶打開最大進程數

限制用戶最多打開1024個文件,修改root無用,修改瓶頸進程例如www用戶限制纔有用。

[root@station253 ~]# vim /etc/security/limits.d/90-nproc.conf

*          soft    nproc     65535

#root       soft    nproc     unlimited


查看對應進程的資源限制#cat /proc/pid號/limits,

[root@station253 ~]# netstat -nutlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1389/sshd               
tcp        0      0 :::22                       :::*                        LISTEN      1389/sshd              
[root@station253 ~]# cat /proc/1389/limits
Limit                     Soft Limit           Hard Limit           Units     
Max processes             7777                 7777                 processes 
Max open files            1024                 4096                 files

3、系統總限制

內核支持進程打開最大文件數

[root@station253 ~]# cat /proc/sys/fs/file-max

98309

內核支持系統目前使用的文件數,

[root@station253 ~]# cat /proc/sys/fs/file-nr

480    0    98309

第一個數表示當前系統已分配使用的打開文件數,第二個數爲分配後已釋放的(目前已再也不使用),第三個數等於file-max。

一個進程最多使用文件數,在內核2.6.5以前沒有nr_open需更改內核中file.fs.max

[root@station253 ~]# cat /proc/sys/fs/nr_open 

1048576

[root@station253 ~]# sysctl -a | egrep "fs.file|fs.nr"

fs.file-nr = 480    0    98309

fs.file-max = 98309

fs.nr_open = 1048576


總結:

a.  全部進程打開的文件描述符數不能超過/proc/sys/fs/file-max

b.  單個進程打開的文件描述符數不能超過user limit中nofile的soft limit

c.  nofile的soft limit不能超過其hard limit

d.  nofile的hard limit不能超過/proc/sys/fs/nr_open

1.應對高併發環境高性能大內存環境64G內存,修改nr_open和file_max能夠設置超過65535的102400,即100W

2.修改系統最大打開進程數/文件數,使用此參數的程序配置文件也須要增長對應參數

   若是你使用squid的話,你要在/etc/init.d/squid的文件加入ulimit -SHn 65535.另外,在squid.conf中也要加入max_filedesc 16384


4、查找文件句柄問題的時候,還有一個很實用的程序lsof。能夠很方便看到某個進程開了那些句柄,也能夠看到某個文件/目錄被什麼進程佔用了。

[root@station253 ~]# lsof              #sshd進程打開哪些句柄

COMMAND     PID    USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME

sshd       1389    root  cwd       DIR                8,2     4096          2 /

sshd       1389    root  rtd       DIR                8,2     4096          2 /

sshd       1389    root  txt       REG                8,2   526008      23317 /usr/sbin/sshd

sshd       1389    root  mem       REG                8,2    65928       4222 /lib64/libnss_files-2.12.so

sshd       1389    root  mem       REG                8,2   240592       4713 /lib64/libnspr4.so

sshd       1389    root  mem       REG                8,2    14560       4724 /lib64/libplds4.so

sshd       1389    root  mem       REG                8,2    18720       4723 /lib64/libplc4.so

[root@station253 ~]# lsof -i:22      #端口22被哪些進程佔用

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

sshd     1389 root    3u  IPv4   9121      0t0  TCP *:ssh (LISTEN)

sshd     1389 root    4u  IPv6   9123      0t0  TCP *:ssh (LISTEN)

sshd    11687 root    3r  IPv4  21241      0t0  TCP station253:ssh->NULL:hyperscsi-port (ESTABLISHED)

[root@station253 ~]#  lsof  +d /usr/sbin   #/usr/sbin目錄下進程正打開的文件

COMMAND   PID USER  FD   TYPE DEVICE SIZE/OFF  NODE NAME

sshd     1389 root txt    REG    8,2   526008 23317 /usr/sbin/sshd

crond    1474 root txt    REG    8,2    59832 20300 /usr/sbin/crond

sshd    11687 root txt    REG    8,2   526008 23317 /usr/sbin/sshd

lsof    11790 root txt    REG    8,2   141048 29342 /usr/sbin/lsof

lsof    11791 root txt    REG    8,2   141048 29342 /usr/sbin/lsof

相關文章
相關標籤/搜索