系统调优:如何解决系统报错too many open files瓶颈

一、检查系统版本是否手工升级

[[email protected] ~]# uname -r   linux的内核版本号
2.6.32-358.el6.x86_64
[[email protected] ~]# cat /proc/version
Linux version 2.6.32-358.el6.x86_64 
[[email protected] ~]# cat /etc/issue  系统安装时默认的发行版本
CentOS release 6.4 (Final)
[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.4 (Final)
[[email protected] ~]# yum -y install redhat-lsb 
[[email protected] ~]# 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显示的发行版本号不同,原因只有一个:系统内核手动升级了。

对于高并发高http连接的应用程序例如www或Java,会遇上Socket/File: Can’t open so many files或too many open files的问题.

最好通过使用ulimit -n xx 修改每个进程可打开的文件数,缺省值是1024,

二、如何增大用户打开最大进程数

ulimit -a 来显示当前的各种用户进程限制

[[email protected] ~]# 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

系统原始文件

ulimit命令有分软硬设置,加-H硬限制是实际的限制,加-S软限制是warnning限制,只会做出warning;

[[email protected] ~]# grep ‘^*‘ /etc/security/limits.conf
*    soft    65535
*    hard    65535

修改方法:

方法一:
1在/etc/rc.local中增加ulimit -SHn 65535
[[email protected] ~]# echo "ulimit -SHn 65535" >> /etc/rc.local 
2在/etc/profile中增加ulimit -SHu 65535
[[email protected] ~]# echo "ulimit -SHu 65535" >> /etc/profile 
然后source /etc/profile让参数即时生效
方法二:修改limits.conf配置文件生效
nofile(可打开的文件描述符的最大数)和nproc(单个用户可用的最大进程数量)
[[email protected] ~]# grep ‘^*‘ /etc/security/limits.conf
*    soft    nproc    65535
*    hard    nproc    65535
*    soft    nofile    65535
*    hard    nofile    65535
退出用户终端重新登录,使配置文件生效
[[email protected] ~]# ulimit -a
open files                      (-n) 65535
max user processes              (-u) 65535

用户打开最大进程数还受此文件影响

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

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

*          soft    nproc     1024

root       soft    nproc     unlimited

修改所有用户打开最大进程数

限制用户最多打开1024个文件,修改root无用,修改瓶颈进程例如www用户限制才有用。

[[email protected] ~]# vim /etc/security/limits.d/90-nproc.conf

*          soft    nproc     65535

#root       soft    nproc     unlimited

查看对应进程的资源限制#cat /proc/pid号/limits,

[[email protected] ~]# 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              
[[email protected] ~]# cat /proc/1389/limits
Limit                     Soft Limit           Hard Limit           Units     
Max processes             7777                 7777                 processes 
Max open files            1024                 4096                 files

三、系统总限制

内核支持进程打开最大文件数

[[email protected] ~]# cat /proc/sys/fs/file-max

98309

内核支持系统目前使用的文件数,

[[email protected] ~]# cat /proc/sys/fs/file-nr

480    0    98309

第一个数表示当前系统已分配使用的打开文件数,第二个数为分配后已释放的(目前已不再使用),第三个数等于file-max。

一个进程最多使用文件数,在内核2.6.5之前没有nr_open需更改内核中file.fs.max

[[email protected] ~]# cat /proc/sys/fs/nr_open

1048576

[[email protected] ~]# 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

四、查找文件句柄问题的时候,还有一个很实用的程序lsof。可以很方便看到某个进程开了那些句柄,也可以看到某个文件/目录被什么进程占用了。

[[email protected] ~]# 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

[[email protected] ~]# 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)

[[email protected] ~]#  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

系统调优:如何解决系统报错too many open files瓶颈

时间: 2024-10-14 11:08:59

系统调优:如何解决系统报错too many open files瓶颈的相关文章

Linux系统调优相关工具

系统调优4大子系统 实战1:找出系统中使用CPU最多的进程? 实战2:找出系统中使用内存最多的进程? 实战3:找出系统中对磁盘读写最多的进程? 实战4:找出系统中使用网络最多的进程? 系统调优概述: 1.系统的运行状况:CPU->MEM->DISK*->NETWORK->应用程序调优 性能优化的4个子系统: CPU Memory IO Network

Linux系统调优1

Linux在进行系统调优的时候,首先要考虑整个操作系统的结构,然后针对各个部分进行优化,下面展示一个Linux系统的各个组成部分: 有上图可以看出,我们可以调整的有应用程序,库文件,内核,驱动,还有硬件本身,所以接下来讲对这些进行详细的介绍,从而是系统的性能有所提高. 内核子系统中主要包括一下几个方面: 1.         network(网络) 2.         IO(输入输出子系统) 3.         process(进程) 4.         memory(内存) 5.    

Linux系统调优

Linux在进行系统调优的时候,首先要考虑整个操作系统的结构,然后针对各个部分进行优化,下面展示一个Linux系统的各个组成部分: 有上图可以看出,我们可以调整的有应用程序,库文件,内核,驱动,还有硬件本身,所以接下来讲对这些进行详细的介绍,从而是系统的性能有所提高. 内核子系统中主要包括一下几个方面: 1.         network(网络) 2.         IO(输入输出子系统) 3.         process(进程) 4.         memory(内存) 5.    

linux系统调优之IO、cpu

首先先要再次强调一个概念:系统调优的目的不是怎样去吧那一部分做的特别优化.而是整体的全局的考虑.性能优化是为了找到系统的瓶颈并且想办法提高瓶颈最好能够去除.(个人认为万事皆有利弊,在计算机的世界里同样如此所以完美是不现实的..) 调优的终极目标是为了让计算机个各个子系统达到一种平衡状态.. 子系统:cpu  memory  Io network 此处不多赘述.. 下来首先来解决io的优化,其实这个优化就是由内核控制选择一种相对较好的io策略对应您的实际环境. 下面给出我们IO调度在系统调用中的位

Sybase数据库应用系统调优的五大领域

Sybase数据库应用系统调优的五大领域 2011/3/14/13:49来源:慧聪it网 本 文以“某大型商业银行的网上银行系统”这一很具有典型意义的企业级大型Sybase数据库应用系统为例,涉及了数据库应用系统调优的五大领域:压力测试. 应用端调优.服务器端调优.系统平台层的优化.应用架构的优化,详细介绍了作者在项目开发过程中曾经遇到的各种问题及其解决办法.本文通过对“企业级 Sybase数据库应用系统的性能调优的最佳实践”的探讨,从而为这类性质的工作提供了具有普遍指导意义的参考. 1.项目背

51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程(高俊峰)

51CTO学习笔记--Linux运维故障排查思路与系统调优技巧视频课程 第一课 Linux运维经验分享与思路 1.一般把主机名,写到hosts下    127.0.0.1    hostname,因为很多应用要解析到本地.oracle没有这个解析可能启动不了. 2.注释掉UUID以及MAC地址,需要绑定网卡的时候,这个可能会有影响. 3.磁盘满了无法启动,  var下木有空间,无法创创建PID等文件,导致文件无法启动,按e   进入single  然后b  重启进入单用户模式. 4.ssh登陆系

61   Linux系统调优基础

01 Linux系统调优基础 #显示进行在哪个cpu上运行 [[email protected] ~]# ps axo psr,     2 ntpd   1 qpidd   3 pickup   3 sshd   0 bash   2 pscomm     #显示进行在哪个cpu上运行,并显示进程的pid  [[email protected] ~]# ps axo psr,comm,pid   2 ntpd             3775   1 qpidd            9998

第五十五课 linux系统调优 之cpu、内存、网络、I/O

linux系统调优之系统基础原理及CPU调优 linux系统调优之内存调优 linux系统调优之网络调优 linux系统调优之内存和IO调优

磁盘被占满   系统出现 no space left on 报错(block被占满/inode被占满)

系统出现 no space left on 报错 但是使用df -h 发现磁盘并没有满 企业中在什么情况下会发生 解答: ext4文件系统在格式化的时候会创建inode 和 block 磁盘空间满是由inode和block两个标准来决定的 题意说用df -h 查看没有满 df -h 是查看block块的说明block块没有满所以应使用df -i 查看inode是否满了 1 block被占满 定位问题 查看实际文件占用空间的大小 # find / -type f | xargs du -s | a