社区
C++ 语言
帖子详情
文件句柄的问题
ysu108
2012-10-23 09:50:35
在linux下,一个进程可以访问的文件句柄的数目是有限制的。我的问题是,为什么要对句柄的数目有限制呢?而且默认的为1024,为什么这么小呢?句柄的本质是什么呢?
...全文
162
4
打赏
收藏
文件句柄的问题
在linux下,一个进程可以访问的文件句柄的数目是有限制的。我的问题是,为什么要对句柄的数目有限制呢?而且默认的为1024,为什么这么小呢?句柄的本质是什么呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
virtualxmars
2012-10-24
打赏
举报
回复
句柄的本质是资源ID号。
而句柄存在的原因在于防止资源的直接篡改操作。例如你打开了一个文件句柄,系统实际上会开辟一段内存空间,保存了这个文件的一些信息,可以认为这些信息就是一个结构体,和我们定义的类实例没有任何区别。但是如果直接将该结构体的地址返回给用户,则用户则能对它进行任意的篡改,这是非常不安全的行为。所以,系统维护了一个句柄表。这个表实际就是映射表,每个句柄值都映射到前面所说的资源结构体的实际内存位置。每当你使用系统提供的API对资源进行操作时,它先从句柄表中查询该结构体的地址,然后再根据结构体内容进行具体的操作。
只有这样,才能保证我们仅能通过系统暴露的API对资源进行“受限”、“安全”的操作。
_暮落_
2012-10-24
打赏
举报
回复
因为linux系统里都是以文件来表示的,所以在做搞并发的web系统时,修改文件句柄限制那是必须的。
查看某个进程使用了的文件句柄数
# sudo ps -ef | grep java
root 1663 1 0 02:37 ? 00:00:43 /opt/bitnami/java/bin/java
从结果中可得知进程的pid,然后根据pid查看该进程当前使用的文件句柄数
#sudo ls /proc/1663/fd | wc -l
1022
发现句柄数一直就停留在1022,同时top查看发现load持续增高。于是先查看了下当前进程的句柄数限制。
#sudo cat /proc/1663/limits | grep "files"
Max open files 1024 1024 files
发现限制卡在这了,于是修改/etc/sysctl.conf文件,添加一行如下:
fs.file-max=30720
保存。并执行
#sudo sysctl -p
然后再查看就发现已经改过来了。
Google发现linux系统里有两种文件句柄限制,一种是系统级的,一种是用户级的。
修改系统级的: www.2cto.com
#echo "30720" > /proc/sys/fs/file-max
修改用户级的:
#sudo vi /etc/security/limits.conf
增加如下行:
* soft nofile 2048
* hard nofile 32768
星号表示任何用户,soft/hard表示软限制、硬限制。修改/etc/pam.d/login文件指定使用PAM
session required /lib/security/pam_limits.so
不过需要注意的是系统是32位还是64位,若是64位的那就是/lib64/security/pam_limits.so
上面的修改后,reboot,再次查看
#ulimit -n
30720
修改成功。
yddd2011
2012-10-24
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
句柄的本质是资源ID号。
而句柄存在的原因在于防止资源的直接篡改操作。例如你打开了一个文件句柄,系统实际上会开辟一段内存空间,保存了这个文件的一些信息,可以认为这些信息就是一个结构体,和我们定义的类实例没有任何区别。但是如果直接将该结构体的地址返回给用户,则用户则能对它进行任意的篡改,这是非常不安全的行为。所以,系统维护了一个句柄表。这个表实际就是映射表,每个句柄值都映射到前面所说的资源结构体……
[/Quote]
++
「已注销」
2012-10-24
打赏
举报
回复
跟句柄表相关。
你可以比较下char 为了只有8位,为什么这么小?
一个QQ号码是一个unsigned int型,那么最多几个QQ号呢,为什么要有这个限制呢?
MT5 非区间均线回归刷单EA教学
句柄
至数组(指标.
句柄
A,小均值,0,iBars(Symbol(),应用周期),true); 指标.
句柄
至数组(指标.
句柄
B,大均值,0,iBars(Symbol(),应用周期),true); //---非区间 double 区间最高价= 数据....
文件
句柄
占用
问题
排查经历
由于
文件
句柄
数的增加,只在应用启动后开始,可以定位
问题
是由于应用引起。 通过【lsof -p 进程号】命令,查看进程的
文件
句柄
占用。 发现大量的
文件
句柄
为: java 116023 root 7485u sock 0,7 0t0 282463093 ...
解决Linux最大进程数和最大
文件
句柄
问题
ulimit -u 10000 #设置每个用户最大进程数位100000 ulimit -n 65535 #设置每个进程的最大
文件
句柄
数
遇到一个日志
文件
变化带来的
文件
句柄
问题
测试部反馈了一个bug:调试日志
文件
有时候不更新。对照代码,项目用的代码和之前项目的代码是一样的。感觉没什么
问题
,我自己测试没发现有不更新的情况,但测试部已经反馈过几次了,肯定有
问题
。项目deadline很快到...
Linux:
文件
句柄
泄漏
问题
Linux:
文件
句柄
泄漏
问题
产生原因进程中打开的
文件
数量 产生原因
文件
句柄
泄漏,也叫
文件
描述符泄漏,当我们打开一个
文件
,操作系统就会给程序分配一个
文件
描述符,如果在使用完成之后,没有及时的关闭
文件
,就会造成...
C++ 语言
64,642
社区成员
250,474
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章