文件是Linux系统中的一切事物的存在形式,计算机中的数据和硬件都是经过文件的形式进行管理,Linux的文件主要有普通文件、文件夹、设备文件、连接文件、管道文件、套接字文件(数据通讯的接口)等类型,Linux 中的各类事物好比像文档、文件夹、键盘、监视器、硬盘、可移动媒体设备、打印机、调制解调器、虚拟终端等等都是定义在文件系统空间下的字节流。web
所以在Linux系统上的web程序,在进行TCP链接时,系统为每一个TCP链接建立一个socket句柄,而每一个句柄也是一个文件句柄,因此web程序对文件的操做状况,是影响到服务器性能的重要指标,像网站在高流量高并发的场景下出现"Too many open files"的异常就是由于打开的文件数超过限制,而程序中对资源(包括图片、音视频资源)、网页、以及接口的请求在Linux系统里的表现为对文件的访问,若是打开文件数超出了系统限制(系统级和用户级)的数量,就会拒绝接下来的文件访问
复制代码
当前用户级的文件数限制,能够经过 ulimit -n 来查看,如图:编程
而系统级别的文件数限制,则经过sysctl -a来查看,以下图:服务器
通常系统最大文件数会根据硬件资源计算出来的,若是强行须要修改最大打开文件数能够经过ulimit -n 10240来修改,当这种方式只对当前进程有效,若是须要永久有效则须要修改/etc/security/limits.conf(重启系统生效),以下图:并发
其中:socket
root :指定用户,如对全部用户,则写 *高并发
soft:软限制性能
hard:硬件限制网站
nofile 是表明最大文件打开数spa
soft nofile (软限制)是指Linux在当前系统可以承受的范围内进一步限制用户同时打开的文件数, hard nofile (硬限制)是根据系统硬件资源情况(主要是系统内存)计算出来的系统最多可同时打开的文件数量 一般软限制小于或等于硬限制code
除此以外,下面是一些打开文件数操做相关的指令,仅供参考:
一、查看全部进程的文件打开数:
lsof |wc -l
二、查看某个进程打开的文件数:
lsof -p pid |wc -l
三、查看系统中各个进程分别打开了多少句柄数:
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
以为本文对你有帮助?请分享给更多人
关注「编程无界」,提高装逼技能