❶ 如何在 linux 下调整可打开文件/文件描述符数目
人们常说linux最大有65536个文件描述符,是由于常用linux内核的默认值决定的,实际上专是可以通过修改内核属突破的。了解下文件描述符,内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。文件描述符的有效范围是 0 到 OPEN_MAX。一般来说,每个进程最多可以打开 64 个文件(0 — 63)。对于 FreeBSD 5.2.1、Mac OS X 10.3 和 Solaris 9 来说,每个进程最多可以打开文件的多少取决于系统内存的大小,int 的大小,以及系统管理员设定的限制。Linux 2.4.22 强制规定最多不能超过 1,048,576 。
❷ linux文件描述符
Linux 下,一切皆文件 在Linux操作系统中,可以将一切都看作是文件,包括普通文件,目录文件,字符设备文件(如键盘,鼠标…),块设备文件(如硬盘,光驱…),套接字等等,所有一切均抽象成文件,提供了统一的接口,方便应用程序调用。 既然在Linux操作系统中,你将一切都抽象为了文件,那么对于一个打开的文件,我应用程序怎么对应上呢? 文件描述符应运而生。 文件描述符:File descriptor,简称fd,当应用程序请求内核打开/新建一个文件时,内核会返回一个文件描述符用于对应这个打开/新建的文件,其fd本质上就是一个 非负整数 。实际上,它是一个索引值,指向 内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。 在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。 操作系统的核心叫内核,是一个独立的软件。 操作系统为每一个进程维护了一个文件描述符表,该表的索引值都从从0开始的,所以在不同的进程中可以看到相同的文件描述符,这种情况下相同的文件描述符可能指向同一个文件,也可能指向不同的文件,具体情况需要具体分析,下面用一张简图就可以很容易的明白了。通过上图可以看到,当不同进程中出现相同的文件描述符时,可能实际对应的文件并不是同一个,相反不同进程中不同的文件描述符也可可能对应同一个文件。 当一个应用程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号。 文件描述符是一个重要的系统资源,理论上系统内存多大就应该可以打开多少个文件描述符,但是实际情况是,内核会有系统级限制,以及用户级限制(不让某一个应用程序进程消耗掉所有的文件资源,可以使用ulimit -n 查看)。 进程 + 文件描述符ID确认,因为内核为每个进程都有一份其所属的文件描述符表。 所以linux下两个进程返回的文件描述符是不一样的 多个进程之间的fd: 应用程序进程拿到的 文件描述符ID 对应 进程文件描述符表 的索引,通过索引拿到 文件指针 ,指向系统级文件描述符表的 文件偏移量 ,再通过文件偏移量找到 inode指针 ,最终对应到真实的文件。
❸ Linux查看进程打开多少文件描述符命令
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
❹ linux的文件描述符号,会不会导致耗尽
Linux文件描述符是一个整数,所以打开过多的文件就会溢出。
❺ linux下的文件描述符是什么
文件描述符是一个很小的正整数,是打开的文件在内核中的索引.
❻ 【fd】Linux文件描述符
在Linux下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当然也是文件。 关于Linux下系统,进程能最大能打开的文件描述符数看过好多文章,但大都没有完整,详细说明每个值表示什么意思,在实践中该怎么设置? 如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作? max-file 表示系统级别的能够打开的文件句柄的数量,是对整个系统的限制,并不是针对用户的。 ulimit -n 控制进程级别能够打开的文件句柄的数量,提供对shell及其启动的进程的可用文件句柄的控制,这是进程级别的。 对于服务器来说,file-max和ulimit都需要设置,否则会出现文件描述符耗尽的问题。 一般如果遇到文件句柄达到上限时,会碰到"Too many open files"或者Socket/File: Can’t open so many files等错误。 相关的3个文件: /proc/sys/fs/file-max /proc/sys/fs/file-nr /etc/security/limits.conf /proc/sys/fs/file-max Linux系统级别限制所有用户进程能打开的文件描述符总数。 max-file 表示系统级别的能够打开的文件句柄的数量,是对整个系统的限制,并不是针对用户的。 /etc/security/limits.conf 用户级别的限制是通过可以通过命令ulimit命令和文件/etc/security/limits.conf /proc/sys/fs/file-nr 该参数是只读的,不能修改。 file-nr的值由3部分组成: 1,已经分配的文件描述符数; 2,已经分配但未使用的文件描述符数; 3,内核最大能分配的文件描述符数 /proc/${pid}/fd 众所周知,在相应进程的/proc/$pid/fd 目录下存放了此进程所有打开的fd。 当然有些可能不是本进程自己打开的,如通过fork()从父进程继承而来的。 那么这个socket:后面的一串数字是什么呢?其实是该socket的inode号。 那么,知道了某个进程打开的socket的inode号后,我们可以做什么呢? 这就涉及到/proc/net/tcp(udp对应/proc/net/udp)文件了,其中也列出了相应socket的inode号通过比对此字段,我们能在/proc/net/tcp下获得此套接口的其他信息,如对应的<本地地址:端口号,远端地址:端口号>对,窗口大小,状态等信息。 具体字段含义详见net/ipv4/tcp_ipv4.c 中的 tcp4_seq_show 函数。 如果socket创建了,没有被使用,那么就只会在/proc/pid/fd下面有,而不会在/proc/net/下面有相关数据。 目录中的每一项都是一个符号链接,指向打开的文件,数字则代表文件描述符。 其中0 = /dev/null ,1 = stdout, 2 = stderr,用cat或tail查看即可。 Number of file descriptors: different between /proc/sys/fs/file-nr and /proc/$pid/fd? https://serverfault.com/questions/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc-pi Linux中最大文件描述符数 https://leokongwq.github.io/2016/11/09/linux-max-fd.html How do linux file descriptor limits work? https://stackoverflow.com/questions/3991223/how-do-linux-file-descriptor-limits-work limits.conf(5) – Linux man page https://linux.die.net/man/5/limits.conf Why can't I tail -f /proc/$pid/fd/1 ? https://unix.stackexchange.com/questions/152773/why-cant-i-tail-f-proc-pid-fd-1 Linux查看进程运行输出(/proc/<pid>/fd) https://blog.csdn.net/u014756245/article/details/120023188
❼ Linux文件描述符表和文件的关系
Linux中的文件类型Linux系统中把一切都看做文件,包括普通文件-、目录文件d、字符设备文件c、块设备文件b、符号链接文件l。文件描述符是内核为了高效管理已被打开的文件所创建的索引(一个非负整数),用于指代已被打开的文件,Linux下所有的的I/O操作的系统调用都是通过文件描述符执行。例如0表示标准输入、1表示标准输出、3表示标准错误,文件描述符会在这个基础上递增。文件描述符、文件、进程之间的关系每个文件描述符都指向一个打开的文件相对应不同的文件描述符可能指向同一个打开的文件相同的文件可能被不同的进程打开,也可以在被同一个进程打开多次文件描述符表:进程级的列表,也就是用户区的一部分,进程每打开一个文件就会新建一个文件描述符,同时只能通过文件描述符的函数访问,否则进程无法直接对其进行访问。系统文件表:系统级的列表,对当前系统的所有进程都共享,每条条目包含文件偏移量、访问模式以及指向它的文件描述符的条目计数文件系统索引节点表:inode索引节点表(UID、GID、ctime、mtime、atime、读写执行权限、链接数、block位置)
❽ Linux查看进程打开多少文件描述符命令
1、当linux打开一个文抄件的时候,Linux内核会为每一个进程在/proc/ 建立一个以其pid为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd(fd:file descriptor)。2、例如/proc/13844/fd/目录(13844为pid)3、ps -ef|grep javaroot 13884 1 0 Aug15 ? 08:51:38 /doyoo/jdk1.8/bin/java4、ll /proc/13884/fd
❾ linux 文件描述符最大是多少
人们常说linux最大有65536个文件描述符,是由于常用linux内核的默认值决定的,实际上是可以通过修改内核突破的。了解下文件描述符,内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。文件描述符的有效范围是 0 到 OPEN_MAX。一般来说,每个进程最多可以打开 64 个文件(0 — 63)。对于 FreeBSD 5.2.1、Mac OS X 10.3 和 Solaris 9 来说,每个进程最多可以打开文件的多少取决于系统内存的大小,int 的大小,以及系统管理员设定的限制。Linux 2.4.22 强制规定最多不能超过 1,048,576 。
❿ linux怎样获取文件描述符
打开一个文件就能获得一个文件描述符
未经允许不得转载:山九号 » 文件描述符linux|Linux查看进程打开多少文件描述符命令