记录 -linux修改open files数

协助排查问题记录

    用户反馈业务有延迟。最终排查到在提交请求时出现了超时,不一会开始出现大量的拒绝连接。紧接着通道方业务中断。

至此开始分析解决通道方问题。以下仅作为记录,并不是发送问题当时的状态

#查看机器参数  open files
[root@xxx]# 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) 63718
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
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) 63718
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

#查看机器当前打开文件数 
[root@xxx]# lsof|awk '{print $2}'|wc -l  
3029

#查看各个进程打开文件数。从大到小
[root@xxx]# lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more
    818 28638
    297 3240
    257 4056
    256 27507
    197 15015
    125 1840
    103 19805
     72 9354
     64 1993
     60 13631
     46 1857
     46 13191
     44 23958
     36 1738
     28 9305
     25 1749
     more...

----------------------以下为引用  原文-http://coolnull.com/2796.html

       linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够。这就需要修改ulimit和file-max。特别是提供大量静态文件访问的web服务器,缓存服务器(如squid), 更要注意这个问题。
网上的教程,都只是简单说明要如何设置ulimit和file-max, 但这两者之间的关系差别,并没有仔细说明。
 

说明:
1. file-max的含义。man proc,可得到file-max的描述:
/proc/sys/fs/file-max
This file defines a system-wide limit on the number of open files for all processes. (See
also setrlimit(2), which can be used by a process to set the per-process limit,
RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages
about running out of file handles, try increasing this value:
即file-max是设置 系统所有进程一共可以打开的文件数量 。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。
也就是说,这项参数是系统级别的。

2. ulimit
Provides control over the resources available to the shell and to processes started by it, on systems that allow such control.
即设置当前shell以及由它启动的进程的资源限制。
显然,对服务器来说,file-max, ulimit都需要设置,否则就可能出现文件描述符用尽的问题

 

修改:
1.修改file-max

# echo  6553560 > /proc/sys/fs/file-max  //sysctl -w "fs.file-max=34166",前面2种重启机器后会恢复为默认值
或
# vim /etc/sysctl.conf, 加入以下内容,重启生效
fs.file-max = 6553560

 
2.修改ulimit的open file,系统默认的ulimit对文件打开数量的限制是1024

# ulimit -HSn 102400  //这只是在当前终端有效,退出之后,open files又变为默认值。
当然也可以写到/etc/profile中,因为每次登录终端时,都会自动执行/etc/profile
或
# vim /etc/security/limits.conf  //加入以下配置,重启即可生效
* soft nofile 65535 
* hard nofile 65535

附录:
附录1.
为了让一个程序的open files数目扩大,可以在启动脚本前面加上ulimit -HSn 102400命令。但当程序是一个daemon时,可能这种方法无效,因为没有终端。

附录2.
如果某项服务已经启动,再动态调整ulimit是无效的,特别是涉及到线上业务就更麻烦了。
这时,可以考虑通过修改/proc/’程序pid’/limits来实现动态修改!!!

----------------------------------------

生产环境中,降低对业务的影响,在不中断剩余正常业务的情况下修复线上问题。

问题出现的原因目前还未被告知

 

你可能感兴趣的:(记录 -linux修改open files数)