linux 如何查看文件描述符是否被释放
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
·
因为linux编程中一切皆是文件,如socket,文本文件,db,flash,等等,尤其是网络编程中server端的socket,经过三次握手以后,经常忘记处理socket,最终导致整个进程的文件描述符耗尽;在linux写程序中经常遇到fd忘记close的情况,也会出现文件描述符耗尽的情况,如下手段可以帮助大家查看文件描述符是否忘记close。
1)Linux系统下,所有进程允许打开的最大fd数量。查询语句:
/proc/sys/fs/file-max
2)Linux系统下,所有进程已经打开的fd数量及允许的最大数量。查询语句:
[root@localhost logs]# cat /proc/sys/fs/file-nr
| 2112 | 0 | 2100000 |
| 已分配文件句柄的数目 | 已使用文件句柄的数目 | 文件句柄的最大数目 |
已分配文件句柄的数目:如果忘记close文件描述符,这个值会不断变大,所以在做压力测试的时候,要特别注意这种情况。
使用c语言获取
#include <stdio.h>
typedef struct
{
unsigned int assigned;/*已分配文件句柄的数目 */
unsigned int used;/*文件句柄的最大数目*/
unsigned int total;/*文件句柄的最大数目*/
}system_info_fd_t;
static void ptcp_server_get_sys_fd_info(system_info_fd_t *info_fd)
{
FILE *fd;
char buff[256];
fd = fopen ("/proc/sys/fs/file-nr", "r");
fgets (buff, sizeof(buff), fd);
sscanf (buff, "%u %u %u", &info_fd->assigned, &info_fd->used,&info_fd->total);
fclose(fd);
}
3)单个进程允许打开的最大fd数量.查询语句:
ulimit -n
4)单个进程(例如通过ps -aux查看到关心的进程id为655)已经打开的fd.查询语句:
ls -l /proc/655/fd/ | wc -l 可以查看到fd不断增大,这样就可以确认是那个进程忘记close 文件描述
A beautiful web dashboard for Linux
最近提交(Master分支:4 个月前 )
186a802e
added ecosystem file for PM2 5 年前
5def40a3
Add host customization support for the NodeJS version 5 年前
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)