debug open files
目前在debug 的时候发现进程使用的fd 数目不够了!!
进程层面:
1.进程最多打开文件描述符数
由于目前进程已经在运行,是有ulimit 修改参数没用,目前可以通过/proc/$pid/limits来动态修改
/proc/$pid/limits
使用ulimit 命令查看 当前的限制以及使用root用户运行以下命令:ulimit -HSn 4096修改 单进程能打开的文件描述符;
以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数。
记住:
- ulimit -n 设置的单shell的最大文件数的限制,如果在一个shell中开启了多个进程,则会共享最大文件数。
由于重启后失效所以一般都在profile 中执行
echo "ulimit -n 1048576" >> /etc/profile
或者在/etc/security/limits.conf中进行设置(root用户),可添加如下两行,表示所有 用户最大打开文件描述符数的soft limit为102400,hard limit为1042400
在etc/security/limits.conf中添加如下内容:
*soft nofile 102400 *hard nofile 102400
- 设置nofile的hard limit还要注意一点的就是hard limit不能大于/proc/sys/fs/nr_open
- 也就是设置/proc/sys/fs/nr_open可以调整 一个进程能够使用的最大文件数
系统方面:
- 系统最大打开文件描述符数: /proc/sys/fs/file-max
- 查看当前系统使用的打开文件描述符数---/proc/sys/fs/file-nr
#cat /proc/sys/fs/file-nr
6784 0 10000000
说明:第一个数表示当前系统已分配的文件描述符数(文件句柄数),第二个数为分配后已释放的文件描述符数(当前不再使用的文件描述符数),
第三个数为最大文件描述符数,等于file-max
- /proc/sys/fs/file-max 是系统级的总文件数量限制,当达到此限制之后内核报错 ENFILE;
- 特权进程( Privileged processes)可以覆盖file-max限制。
》1.所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
》2.单个进程打开的文件描述符数不能超过user limit --->ulimit 中的nofile的soft limit
注意:当程序是一个daemon时,使用ulimit -HSn 设置其max open file时是无用的, 重启dmemon 进程 ulimit -n 发现其值是40000;
但是cat /proc/pid/limits 发现其open max 值还是1024
实际上 一般都是在代码里面通过setrlimit(RLIMIT_NOFILE, &rlmt) 设置相关参数吧
关于 file-max等具体信息可以通过man proc 查看!!!!
http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!!
但行好事 莫问前程
--身高体重180的胖子
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2020-03-23 性能工具-io工具
2020-03-23 linux后台开发常用调试工具
2020-03-23 GDB的原理&& 使用
2020-03-23 可变参数以及stdcall