Linux进程数,句柄数,文件描述符是什么

linux文件句柄数

linux文件句柄数

1、问题阐述:

too many open files:顾名思义即打开过多文件数。

不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。

2、产生的原因:

经常在使用linux的时候出现,大多数情况是由于程序没有正常关闭一些资源引起的,所以出现这种情况,请检查io读写,socket通讯等是否正常关闭。

3、经典案例:

很多项目上线不久运行了一段时间后,服务突然宕了,经检查日志,出现了too many open files 错误。

  • 1)统计各进程打开句柄数:lsof -n|awk ‘{print $2}‘|sort|uniq -c|sort -nr
  • 2)统计各用户打开句柄数:lsof -n|awk ‘{print $3}‘|sort|uniq -c|sort -nr
  • 3)统计各命令打开句柄数:lsof -n|awk ‘{print $1}‘|sort|uniq -c|sort -nr

tcp的65535个连接之迷

tcp的65535个连接之迷

Linux下高并发socket最大连接数所受的各种限制

Linux下高并发socket最大连接数所受的各种限制

在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit命令查看系统允许当前用户进程打开的文件数限制:
[[email protected] ~]$ ulimit -n

linux进程数和句柄数

linux进程数和句柄数

Linux 命令神器:lsof 入门

Linux 命令神器:lsof 入门

原文地址:https://blog.51cto.com/11114389/2417588

时间: 2024-10-13 04:02:38

Linux进程数,句柄数,文件描述符是什么的相关文章

并发时-修改Linux系统下的最大文件描述符限制

通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下: $ulimit -n1024 当然可以通过ulimit -SHn 102400 命令来修改该限制,但这个变更只对当前的session有效,当断开连接重新连接后更改就失效了. 如果想永久变更需要修改/etc/security/limits.conf 文件,如下:vi /etc/security/limits.conf* hard nofile 102400* soft no

Linux系统下通过Socket文件描述符寻找连接状态

Proc虚拟文件系统下面有许多数字命名的子目录,这些数字表示系统当前运行的进程号: 其中/proc/N/fd目录下面保存了打开的文件描述符,指向实际文件的一个链接.如下: [[email protected]_10_1_17_138 song_test]# ll /proc/25465/fd total 0 lrwx------ 1 root root 64 Apr 14 09:36 0 -> /dev/pts/4 (deleted) lrwx------ 1 root root 64 Apr

Linux 套接字与文件描述符

端口和套接字,用于确定指定主机上的哪个本地进程使用了哪个协议和哪台远程主机上的哪个进程进行了通信.端口和套接字的使用可以基于以下几点: ①为每个应用过程分配一个过程标识符(Process ID),每次启动一个进程时,这个ID都可能是不同的. ②进程ID因操作系统平台不同而不同,因而它们是不统一的. ③一个服务器过程能够同时与多个客户连接,因而简单的连接标识符不可能是唯一的. 端口和套接字概念提供了一种以统一的方式唯一地标识连接以及参与连接的程序和主机的方法,而不管特定的过程ID. (1)端口 

linux套接字或者文件描述符的未读取得字节数FIONREAD,MSG_PEEK标志

FIONREAD,就是返回缓冲区有多少字节.输入有个输入缓冲区,用int nread;ioctl(0,FIONREAD,&nread); 能得到缓冲区里面有多少字节要被读取.值放在 nread里面了. 然后就可以 read 了.nread = read(0,buffer,nread); ============================================================================ MSG_PEEK标志可以用来读取套接字接收队列中可读的数据

Linux中的文件描述符与打开文件之间的关系

1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个新的文件,它的文件描述符会是3.POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号

每天进步一点点——Linux中的文件描述符与打开文件之间的关系

转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果此时去打开一个

(转)Linux中的文件描述符

本文转自:http://blog.csdn.net/cywosp/article/details/38965239 作者:cywosp 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符.程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误.如果

文件句柄、文件描述符与进程和多线程的那些事

本文出至:http://my.oschina.net/iuranus/blog/330397?fromerr=x1SVuj0Z 文件句柄(摘抄的一些概念,帮助理解): 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.WINDOWS句柄有点象C语言中的文件句柄. 如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针.我们知道,所谓指针是一种内存地址.应用程序启动后,组成这个程

在进程间传递文件描述符

由于fork调用之后,父进程中打开的文件描述符在子进程中仍然保持打开,所以文件描述符可以很方便地从父进程传递到子进程.需要注意的是,传递一个文件描述符并不是传递一个文件描述符的值,而是要在接收进程中创建一个新的文件描述符,并且该文件描述符和发送进程中被传递的文件描述符指向内核中相同的文件表项. 在Linux下,我们可以利用UNIX城socket在进程间传递特殊的辅助数据,以实现文件描述符的传递,它在子进程中打开一个文件描述符,然后将它传递给父进程,父进程则通过读取该文件描述符来获得文件的内容.

Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET

在Linux中,内核利用文件描述符(File Descriptor)即文件句柄,来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描述符.读写文件也需要使用文件描述符来指定待读写的文件.宏FD_ZERO.FD_SET.FD_CLR.FD_ISSET中"FD"即为file descriptor的缩写,下面来一一进行介绍. 首先介绍一个重要的结构体:fd_set,它会作为下面某些函数的参数而多次用到,fd_set可以理解为一个集合,这个集合中存放的是文件描述符(