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