在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题,其实Linux是有文件句柄限制的(就像WinXP?),而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到这个数量,因此我们需要把这个值改大一些。
大概知道ulimit这个命令是相关的,上Google搜索了一下,大多数说的很含糊,也没有统一说一下,经过两个小时看了不少文章终于弄清楚ulimit相关的一些配置问题。
我们可以用ulimit -a来查看所有限制值,我只关心文件句柄数量的问题
open files (-n) 1024
这个就是限制数量
这里,有很多ulimit的文章都说的很含糊,究竟这个1024是系统的限制,还是用户的限制呢。其实,这个是用户限制来的,完整的说法,应该是当前用户准备要运行的程序的限制。
1、这个限制是针对单个程序的限制
2、这个限制不会改变之前已经运行了的程序的限制
3、对这个值的修改,退出了当前的shell就会消失
比如说,我先运行了一个程序A,然后通过ulimit修改了限制为2048,然后运行B,然后退出了shell再登录,然后运行C。那就只有B可以打开2048个句柄。
如果我们需要改变整体的限制值,或者我们运行的程序是系统启动的,应该怎么处理呢
其中一个方法,是想ulimit修改命令放入/etc/profile里面,但是这个做法并不好
正确的做法,应该是修改/etc/security/limits.conf
里面有很详细的注释,比如
* soft nofile 2048
* hard nofile 32768
就可以将文件句柄限制统一改成软2048,硬32768
这里涉及另外一个问题,什么是软限制,什么是硬限制
硬限制是实际的限制,而软限制,是warnning限制,只会做出warning
其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果修改的时候没有加上的话,就是两个一起改
配置文件最前面的一位是domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制
修改了,重新登录用ulimit一开就立刻生效了,不过之前启动过的程序要重新启动才能使用新的值。我用的是CentOS,似乎有些系统需要重启才能生效。
ulimit其实就是对单一程序的限制
那系统总限制呢
其实是在这里,/proc/sys/fs/file-max
可以通过cat查看目前的值,echo来立刻修改
另外还有一个,/proc/sys/fs/file-nr
只读,可以看到整个系统目前使用的文件句柄数量
查找文件句柄问题的时候,还有一个很实用的程序lsof
可以很方便看到某个进程开了那些句柄
也可以看到某个文件/目录被什么进程占用了。
分享到:
相关推荐
此外,Linux 系统中还存在 ulimit 命令,用于控制进程级别的资源使用,包括文件句柄数量、进程数量、core 文件大小等。ulimit 命令可以控制进程可以打开的文件句柄的数量,以免进程打开太多的文件句柄导致“Too many...
在 Linux 系统中,进程句柄数设置是一个重要的参数,它决定了单个进程能够打开的最大文件句柄数量,包括 socket 连接。系统默认值为 1024,这对于一般的应用来说已经足够使用。但是,对于需要处理大量请求的应用,如...
修改文件句柄数在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。 对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象...
设置Linux打开文件句柄/proc/sys/fs/file-max和ulimit -n的区别表示系统级别的能够打开的文件句柄的数量.是对整个系统的限制,并不是
文章目录文件句柄查看用户级别(nofile)单个进程级别(nr_open )系统级别(file-max)修改用户级别(nofile)单个进程级别(nr_open )系统级别(file-max)总结参考 tips: 网上说什么的也有,你抄我的我抄你的...
在Linux和其他类Unix系统中,句柄通常用来标识一个打开的文件或其他系统资源。 #### 二、Linux进程标识符 1. **PID(Process ID)**: - PID是进程标识符,每个运行中的进程都有一个唯一的PID。 - PID由内核分配...
除了进程级别的限制,Linux系统本身也有一个总的文件句柄限制,这个限制决定了整个系统能同时打开的最大文件数量。这个值可以通过读取`/proc/sys/fs/file-nr`文件来获取: ```bash cat /proc/sys/fs/file-nr ``` ...
文件句柄是操作系统为每一个打开的文件分配的唯一标识,它存储在主内存的一个特定区域,这个区域的大小决定了系统能同时处理多少个文件。由于操作系统需要内存来管理这些句柄,因此对打开文件数量的限制是为了防止...
linux下文件描述符最大限制默认最大为1024,通过 [root@localhost ~]# ulimit -n 1024 这个命令可以查看。此值可以修改。 进程的文件描述符,可以通过 [root@localhost ~]# ls -al /proc/13623/fd |wc -l 59 输出...
例如,在C#中,可以使用`System.Diagnostics.Process`类的`Handles`属性获取进程的句柄数量。在Python中,可以利用`psutil`库获取进程的句柄信息。 句柄的查看不仅可以帮助定位资源泄露问题,还可以用于优化代码,...
当MySQL数据库尝试建立超过系统允许的文件句柄数量的连接时,就会发生Too many connections错误。这通常是因为Linux的文件句柄限制导致MySQL的最大连接数受到了限制。 Linux系统中用于查看和修改文件句柄限制的命令...
然而,Linux系统默认对每个进程可打开的文件句柄数量进行了限制,这通常是基于安全性和资源管理的考虑。 #### 三、查看当前文件句柄限制 在Linux中,可以通过`ulimit -n`命令来查看当前用户的进程可打开文件句柄的...
如果经常遇到此问题,可能需要优化程序以减少打开的文件数量,或者增加系统允许的最大文件句柄数。 解决这类问题的关键在于排查每个环节,从编码、路径、权限到系统状态。通过仔细检查并逐个排除上述可能的原因,...
总的来说,理解如何查看和管理Linux进程的句柄数对于优化系统性能、排查问题以及确保服务稳定运行至关重要。通过熟练掌握`ulimit`、`lsof`和`awk`等工具,系统管理员能够有效地监控和控制系统的资源使用,从而提高...
### Linux系统优化详解 #### 一、操作系统内核优化 ...综上所述,通过对Linux系统内核参数、文件句柄与进程数限制、磁盘管理和语言环境的合理配置,可以显著提高系统的性能和稳定性,为用户提供更好的服务体验。
"Too many open files" 是一个在Linux系统中常见的错误,主要出现在系统无法处理当前进程中打开的文件句柄数量超过系统设定限制时。该错误通常发生在云服务器上,尤其是在运行复杂应用或服务时。理解这个错误的原理...
如果路径正确且子目录允许,系统会在该子目录下创建一个新的文件记录,分配磁盘空间,并返回文件句柄供后续访问。 2. **读取文件**:读取文件时,操作系统会根据提供的文件路径找到对应的文件记录,然后读取磁盘上...
本文主要关注Linux系统层面的调优,包括文件句柄、单个用户最大进程数和swap分区的优化,同时介绍了一些常见的Linux面试题。 首先,Linux系统对文件句柄的限制是性能优化的重要一环。默认情况下,系统和进程的文件...