如何通过/proclsof 查看文件句柄柄数

在使用linux做为关键应用的过程中,特别是大压力负载的时候,经常会遇到一些诸如“too many open files”,“系统默认最大线程数是多少?如何调整?”等问题。此时,我们就必须使用ulimit或proc去调整系统的某些参数。一、区别ulimit和对proc目录都可以作出某些限制,但它们之间是有区别的:1、ulimit命令:1)直接使用ulimit命令,只对当前tty(终端有效),若要每次都生效的话,可以把ulimit参数放到对应用户的.bash_profile里面;2)针对所有用户的设置,在/etc/security/limits.conf文件,其是可以对系统用户、组进行cpu、文件数等限制的,通过它可以针对某个用户或全部进行限制。但不能超越系统的限制;(*表示所有用户、soft表示可以超出,但只是警告;hard表示绝对不能超出,unlimited用于表示不限制)3)另一方法是,如果想对所有用户设置,也可以放在/etc/profile文件里面,下面是该文件里面的默认参数:
ulimit -S -c 0 & /dev/null 2&&1
2、/proc目录:1)/proc目录里面包括很多系统当前状态的参数,例如:
/proc/sys/fs/file-max/proc/sys/fs/inode-max
是对整个系统的限制,并不是针对用户的;2)proc目录中的值可以进行动态的设置,若希望永久生效,可以修改/etc/sysctl.conf文件,并使用下面的命令确认:
# sysctl -p
例如增加:
fs.file-max=xxxfs.inode-max=xxx
二、ulimit命令简介(以下引用网上的部分资料)1、说明:ulimit用于shell启动进程所占用的资源.2、类别:shell内建命令3、语法格式:ulimit [-acdfHlmnpsStvw] [size]4、参数介绍:
-H 设置硬件资源限制.-S 设置软件资源限制.-a 显示当前所有的资源限制.-c size:设置core文件的最大值.单位:blocks-d size:设置数据段的最大值.单位:kbytes-f size:设置创建文件的最大值.单位:blocks-l size:设置在内存中锁定进程的最大值.单位:kbytes-m size:设置可以使用的常驻内存的最大值.单位:kbytes-n size:设置内核可以同时打开的文件描述符的最大值.单位:n-p size:设置管道缓冲区的最大值.单位:kbytes-s size:设置堆栈的最大值.单位:kbytes-t size:设置CPU使用时间的最大上限.单位:seconds-v size:设置虚拟内存的最大值.单位:kbytesunlimited 是一个特殊值,用于表示不限制
5、简单实例:如果我们想要对由shell创建的文件大小作些限制,如:引用:
[/home/javalee]ll h-rw-r--r-- 1 javalee javalee 月 22 02:39 h[/home/javalee]ulimit -f 100 #设置创建文件的最大块(一块=512字节)[/home/javalee]cat h&newhFile size limit exceeded[/home/javalee][/home/javalee]ll newh-rw-r--r-- 1 javalee javalee 51200 11月 8 11:47 newh
文件h的大小是150062字节,而我们设定的创建文件的大小是512字节x100块=51200字节,当然系统就会根据你的设置生成了51200字节的newh文件。若要每次都生效,把你要设置的ulimit放在/etc/profile这个环境文件中即可。三、实例说明对
于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点
捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files
open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:
# lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
# lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more    131 24204   57 24244   57 24231   56 24264
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
# ps -aef|grep 24204 mysql   99 16:15 ?    00:24:25 /usr/sbin/mysqld
哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。以root用户运行以下命令:
# ulimit -HSn 4096
上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响
应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,可以修改.bash_profile文件,可以修改
/etc/profile 把上面命令加到最后。四、/proc目录配置由于/proc目录涉及的配置非常多,包括网络、文件系统等,后续以一篇独立的文章进行吧。
浏览: 61376 次
来自: 南京
os.path.splitext(file)[1] 不就可以吗 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'Linux下查看进程打开的文件句柄数和如何修改
我的图书馆
Linux下查看进程打开的文件句柄数和如何修改
& & 修改文件句柄数在Linux下,我们使用ulimit -n
命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。
对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有
点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到“too many files
open”的错误提示。如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮你查看:
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more
在系统访问高峰时间以root用户执行上面的脚本,可能出现的结果如下:
# lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
其中第一行是打开的文件句柄数量,第二行是进程号。得到进程号后,我们可以通过ps命令得到进程的详细内容。
ps -aef|grep 24204&&
mysql&&&&24204
?&&&&&&&&00:24:25
/usr/sbin/mysqld&&
哦,原来是mysql进程打开最多文件句柄数量。但是他目前只打开了131个文件句柄数量,远远底于系统默认值1024。
但是如果系统并发特别大,尤其是squid服务器,很有可能会超过1024。这时候就必须要调整系统参数,以适应应用变化。Linux有硬性限制和软性限制。可以通过ulimit来设定这两个参数。方法如下,以root用户运行以下命令:
ulimit -HSn 4096&&
上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量。个人觉得最好不要超过4096,毕竟打开的文件句柄数越多响
应时间肯定会越慢。设定句柄数量后,系统重启后,又会恢复默认值。如果想永久保存下来,,可以修改 /etc/profile
把上面命令加到最后。(findsun提出的办法比较合理)
/////////////////////////////////////////////////////////////////////////////
在 Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many
files的问题,其实Linux是有文件句柄限制的(就像WinXP?),而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到
这个数量,因此我们需要把这个值改大一些。
大概知道ulimit这个命令是相关的,上Google搜索了一下,大多数说的很含糊,也没有统一说一下,经过两个小时看了不少文章终于弄清楚ulimit相关的一些配置问题。
我们可以用ulimit -a来查看所有限制值,我只关心文件句柄数量的问题
open files (-n) 1024
这个就是限制数量
这里,有很多ulimit的文章都说的很含糊,究竟这个1024是系统的限制,还是用户的限制呢。其实,这个是用户限制来的,完整的说法,应该是当前用户准备要运行的程序的限制。
1、这个限制是针对单个程序的限制
2、这个限制不会改变之前已经运行了的程序的限制
3、对这个值的修改,退出了当前的shell就会消失
比如说,我先运行了一个程序A,然后通过ulimit修改了限制为2048,然后运行B,然后退出了shell再登录,然后运行C。那就只有B可以打开2048个句柄。
如果我们需要改变整体的限制值,或者我们运行的程序是系统启动的,应该怎么处理呢
其中一个方法,是想ulimit修改命令放入/etc/profile里面,但是这个做法并不好
正确的做法,应该是修改/etc/security/limits.conf
里面有很详细的注释,比如
* soft nofile 2048
* hard nofile 32768
就可以将文件句柄限制统一改成软2048,硬32768
这里涉及另外一个问题,什么是软限制,什么是硬限制
硬限制是实际的限制,而软限制,是warnning限制,只会做出warning
其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果修改的时候没有加上的话,就是两个一起改
配置文件最前面的一位是domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制
修改了,重新登录用ulimit一开就立刻生效了,不过之前启动过的程序要重新启动才能使用新的值。我用的是CentOS,似乎有些系统需要重启才能生效。
ulimit其实就是对单一程序的限制
那系统总限制呢
其实是在这里,/proc/sys/fs/file-max
可以通过cat查看目前的值,echo来立刻修改
另外还有一个,/proc/sys/fs/file-nr
只读,可以看到整个系统目前使用的文件句柄数量
查找文件句柄问题的时候,还有一个很实用的程序lsof
可以很方便看到某个进程开了那些句柄
也可以看到某个文件/目录被什么进程占用了。
TA的最新馆藏[转]&
喜欢该文的人也喜欢当前位置: >
Linux 文件句柄限制分析
时间: 14:47 来源:未知 标签: 作者:谭博 阅读:次
一个部署到&linux下的中间件项目,当收到一个&Client登录的时候,需要为这个&Client打开四个文件,当进行&多用户的大压力测试的时候,程序就出问题了:&too many opened files。&网上一查,发现有人也碰到过类似的&socket/File: Can&t open so many files问题。&在此总结一下这个问题,希望对后来之人有点帮助。&
解决之法:&
1,&ulimit -a&查看当前用户的文件句柄限制
&&& open files (-n) 65535这个就是限制数量。&(65535是我已经修改后的值了,没修改前是1024)
2,修改&/etc/security/limits.conf&增加下面的代码:
Shell代码&&
我们添加了有&soft, hard两种:硬限制是实际的限制,而软限制,是&warnning限制,只会做出&warning。修改时,改成一样就可以了。
3,&重启&shell即可。&(有些系统可能需要重启系统&, red hat 的肯定不用的)
4,&ulimit -a&查看设置是否成功。&
原理分析:&
Linux是有文件句柄限制的,而且默认不是很高,一般都是&1024,应用程序很容易就达到这个数量,所以也就有了这篇文章。&ulimi是对单一程序的限制&,而不是单个用户。
查看系统总限制&命令:
Shell代码&&
查看整个系统目前使用的文件句柄数量命令:
Shell代码&&
辅助命令:&
查找文件句柄问题的时候,还有一个很实用的程序&lsof,可以很方便看到某个进程开了哪些句柄&:
Shell代码&&
某个进程开了几个句柄&:
Shell代码&&
也可以看到某个目录&/文件被什么进程占用了,显示已打开该目录或文件的所有进程信息&:
Shell代码&&
关注微信公众号
微信扫一扫,打赏我
下一篇:没有了
内容不错,支持一下
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)相关文章推荐
句柄的本质:一个唯一的整数,作为对象的身份id,区分不同的对象,和同类中的不同实例。程序可以通过句柄访问对象的部分信息。句柄不代表对象的内存地址。
句柄和指针的区别:程序不能通过句柄直接阅读文件中的...
文件到读取与写入
java读取txt文件内容。可以作如下理解:
首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。
所有这些在Java里都得到了简化,任何东西都可看作对象。因此,我们可采用一种统一的语法,任何地方均可照搬不误。但要注意,尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄”(Handl...
ulimit 查看系统的文件相关限制单个进程最多允许打开的文件句柄数(包括socket连接数)是有限制的,当大于这个系统限制时,程序会抛出大量的无法打开文件的报错。...
问题说明:
在Linux中查看日志时,发现有Can’t
open so many files信息。应该是虚拟机打开文件数或者sockets数太多了。在Linux下,我们使用ulimi...
转载自:/thread-.html原文:之前我也写过几个网站排障方面的文章,这次给大家带来的是一次排查服务器操作卡顿问题的排障心得。
摘自:http://blog.chinaunix.net/uid--id-2689047.html
CloseHandle()函数的使用??
很多程序在创建线程都这样写的:...
linux最大文件句柄数量总结
原创文章,转载请注明出处:/blog/2096461
写这个文章是为了以正视听,网...
linux 打开文件句柄时可能出现“Too many open files”的提示,可以修改linux的最大文件句柄数限制:
1)ulimit -n 65535
在当前session有...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3cecfa-ua98).
重新安装浏览器,或使用别的浏览器}

我要回帖

更多关于 proc 查看文件句柄 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信