记排查too many open files问题思路
排查思路:
1. 首先确认进程id
ps -ef | grep xxx
查看对应进程的句柄数
lsof -p $PID | wc -l
这里有一点要注意的是,lsof不加-p参数,得到的结果会比实际句柄数多很多,不是准确数量。https://blog.csdn.net/Waria/article/details/116157567
线程共享 |
线程独享 |
---|---|
地址空间 | 程序计数器 |
全局变量 | 寄存器 |
打开的文件 | 栈 |
子进程 | 状态字 |
闹钟 | |
信号及信号服务成勋 | |
记账信息 |
2. 查看系统文件描述符
cat /etc/security/limits.conf
查看当前 Shell 的 nofile 限制
ulimit -n
查看某一进程的 nofile限制
cat /proc/$PID/limits
根据查到的结果,可以分析出,是系统设置的句柄数不满足业务需求,还是代码异常导致句柄泄露。
补充:配置supervisord句柄数限制
修改配置文件 /usr/lib/systemd/system/supervisord.service , 将LimitNOFILE设置为 10000。
[Unit] Description=Process Monitoring and Control Daemon After=rc-local.service nss-user-lookup.target [Service] Type=forking LimitNOFILE=10000 ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf [Install] WantedBy=multi-user.target
保存文件后,需要调用 systemctl daemon-reload
刷新服务配置。
# 查看默认的 LimitNOFILE > systemctl show -p DefaultLimitNOFILE 4096 # 查看某一个 Service 的 LimitNOFILE > systemctl show supervisord -p LimitNOFILE 10000
参考自 https://e7868a.com/linux-limits
https://stackoverflow.com/questions/45055748/too-many-open-files-raised-by-supervisord
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2018-11-03 phantomjs api文档