Too many open files 问题解决

在Linux下,我们使用ulimit -n命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files open”的错误提示。

知识学习

查看系统默认的最大文件句柄梳理

查看Linux系统默认的最大文件句柄数,系统默认是1024。

# ulimit -n
1024

查看Linux系统默认的最大文件句柄数详细说明

# ulimit -a
core file size          (blocks, -c) 0  
data seg size           (kbytes, -d) unlimited  
scheduling priority             (-e) 30  
file size               (blocks, -f) unlimited  
pending signals                 (-i) 30605  
max locked memory       (kbytes, -l) 40000  
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) 65  
stack size              (kbytes, -s) 8192  
cpu time               (seconds, -t) unlimited  
max user processes              (-u) 30605  
virtual memory          (kbytes, -v) unlimited  
file locks                      (-x) unlimited 

查看某个应用的进程PID

# ps aux| grep mysql 
mysql     5474  0.0  0.6 8704208 396136 ?      Sl    7Ղ26 156:54 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock
root      8199  0.0  0.0  14096   968 pts/3    S+   14:24   0:00 grep --color=auto mysql

查看某个进程打开的文件句柄数量

# lsof -n | grep 5474 -c
6480

其他命令

#进程句柄
ll /proc/pid/fd
#统计进程句柄数
ll /proc/pid/fd|wc -l
----查看当前进程打开了多少句柄数

# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

131 24204 

57 24244  

57 24231   ........

其中第一列是打开的句柄数,第二列是进程ID。

可以根据ID号来查看进程名。

# ps aef|grep 24204

nginx  24204 24162 99 16:15 ?    00:24:25 /usr/local/nginx/sbin/nginx -s

查看系统所有进程以及各进程打开的文件句柄数量

root@ubuntu:~# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr
 100015 24446
  73220 10515
  30618 27008
  30618 26943
  28130 27187
  22176 19084
  15565 26891
  13685 4083
   9360 24143
   9000 19529
   7440 16600
   6480 5474
   6250 18940
   4158 13083
   3869 14017
   1798 18817
    252 14497
    189 31639
    108 29620
     92 625
     86 10695
     86 10685
     86 10678
      3 92
      3 91
      3 10
      1 PID
root@ubuntu:~# 

第一列是打开的句柄数,第二列是进程号
如果想分页展示的话可以使用lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more命令

查看单个进程的详细信息

# ps -aef|grep 24446
root      8302  8165  0 14:31 pts/3    00:00:00 grep --color=auto 24446
root     24446     1  0 10Ղ23 ?       02:04:39 java -Xms128M -Xmx2G -Djava.ext.dirs=/iflytek/skynet/lib:/iflytek/skynet/plugin/engine/lib: -Dfile.encoding=UTF-8 -Dcluster_group_name=skynet -Duser.timezone=GMT+0800 -Dzookeeper_servers=10.1.186.101:2181 -Dzookeeper_sessionTimeout=20000 -Dzookeeper_connectionTimeout=5000 -DSKYNET_HOME=/iflytek/skynet -DVERSION=1.3.1-SNAPSHOT -Djava.library.path=.:../lib/sigar -jar /iflytek/skynet/plugin/xmanager/lib/skynet-xmanager-1.3.1-SNAPSHOT.jar --address= --port=

解决方案

环境变量

编辑/etc/profile文件,在文件尾部添加

# vim /etc/profile

ulimit -c unlimited  
ulimit -u 10000  
ulimit -n 102400  
ulimit -m unlimited  
ulimit -s unlimited  
ulimit -v unlimited
ulimit -t unlimited

ulimit -c unlimited 将设定core文件的最大值,单位为区块,大小不限制
ulimit -u 10000 将某linux用户的最大进程数设为10000个
ulimit -n 102400 将每个进程可以打开的文件数目加大到102400
ulimit -m unlimited 最大内存大小不限制
ulimit -s unlimited 堆栈大小不限制
ulimit -v unlimited 虚拟内存不限制
ulimit -t unlimited CPU 时间不限制

系统配置

编辑/etc/security/limits.conf文件,在文件尾部添加

# vim /etc/security/limits.conf

*        soft    noproc  10240
*        hard    noproc  10240
*        soft    nofile  10240
*        hard    nofile  10240
root     soft    noproc  10240
root     hard    noproc  10240
root     soft    nofile  10240
root     hard    nofile  10240

对于ubuntu操作系统,必须设置最后四行,否则不生效
修改完了,要退出终端,重新打开xshell重新登录

系统最大文件句柄数

编辑/etc/sysctl.conf文件,在文件尾部添加

fs.file-max=655350

运行命令/sbin/sysctl -p 使配置生效

fs.file-max=655350 #限制整个系统最大文件句柄数
修改完了,要退出终端,重新打开xshell重新登录

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容