系统进程打开文件最大句柄数的限制
来源:互联网 发布:淘宝上怎么卖二手货 编辑:程序博客网 时间:2024/05/02 03:09
转自:http://blog.csdn.net/iihero/article/details/8103815
Windows下,默认值是512。但是可以改:
/**
* get and set the max handlers of opening files
*/
void testMaxHandlersOfFiles()
{
printf( "maxstdio: %d\n", _getmaxstdio());
_setmaxstdio(2048);
printf( "maxstdio: %d\n", _getmaxstdio());
}
Linux下,可用ulimit命令来查看和修改,或者修改/etc/security/limits.conf也可以修改。
这个东东作用非常大。有时候直接影响到一个服务器程序的性能,可用性。
笔者曾经遇到某应用服务器进程同时打开太多文件,导致系统不可用的问题。如果事先知道这些限制,那么就可以少走弯路了。
转自:http://blog.sina.com.cn/s/blog_4b7b0e6c0100sqv4.html
刚才帮同学看了个程序,结构比较简单,一个计算函数,一个主函数。
编译无错,运行时,总是运行到第509次时就崩溃了。
简单看了下程序,主函数就是一个调用计算函数的循环,计算函数里面有若干次的文件读写操作和一次随机数生成调用,其他是大量的计算过程。
先扫了下代码,发现太乱,就先想看是不是随机数调用的问题,于是把随机数生成去掉运行,结果还是第509次运行出错,看来不是随机数的问题;接着把计算过程都注释掉运行,依然是第509次崩溃;最后目光集中到剩下的文件操作上,联想到509跟255的关系,猜测可能是文件句柄打开的数目达到了系统上限,虽然我自己从来没碰到过这种情况。
接着重点检查文件打开和关闭,果然,所有的文件打开关闭操作都有对应,唯独有一次没有关闭。于是加上一条关闭语句,再运行,果然正常了,不再崩溃。
问题解决了,但为什么是509次呢?跟2的n次方没什么关系啊?想了下,可能是程序启动时系统默认打开了三个句柄的缘故,即标准输入文件stdin、标准输出文件stdout、标准错误输出文件stderr。
为了验证,搜索了一下,发现有一对可以获取和设置当前系统允许打开的最大句柄数的函数:_getmaxstdio()和_setmaxstdio()。不过这是windows的平台函数,其他系统平台有没有类似的函数没去深究。
写了个程序简单验证了一下,果然,当前系统允许的最大句柄数是512,512-3=509。
问题虽然不是很复杂,但进一步说明,一定要有良好的文件操作习惯。程序简单了还好,复杂了就难说了。
- 系统进程打开文件最大句柄数的限制
- 系统进程打开文件最大句柄数的限制
- Windows系统进程打开文件句柄数的限制
- 解除Linux最大进程数和最大文件句柄打开数限制
- 解除Linux最大进程数和最大文件句柄打开数限制
- 解除 Linux 系统的最大进程数和最大文件打开数限制
- 解除 Linux 系统的最大进程数和最大文件打开数限制
- 一个进程能够打开最大文件句柄数的设置
- 进程可打开的最大句柄数
- 进程可打开的最大句柄数
- 修改打开文件的句柄数限制
- 关于系统打开的最大文件数限制
- 关于系统打开的最大文件数限制
- 获取进程打开的文件句柄数
- 提高linux对最大进程数和最大打开文件描述符数的限制
- CentOS7修改单个进程可打开的最大文件句柄数
- 修改linux的最大文件句柄数限制
- 修改linux的最大文件句柄数限制
- StringBuilder与StringBuffer的区别(转)
- Ubuntu12.04 下面 Virtualbox 下使用USB
- windows XP下安装Python2.7及其安装包的方法
- 道路救援企业IT系统初探
- 日常纠错
- 系统进程打开文件最大句柄数的限制
- android 中用SQLITE实现电子词典的方法
- open淘宝 淘宝API 开发常见错误
- fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
- XAML实例教程系列 – 开篇
- 善待老人和儿童
- 屏幕分辨率及获取屏幕相关信息(屏幕大小,状态栏、标题栏高度)
- ModernStyleMap 软件用户协议及隐私声明
- DataSet中DataTable的用法:查询