本文链接: http://www.php-oa.com/2008/04/21/ulimit-linux.html
在Linux下面部署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题,比如还有Squid做代理,当文件打开数到900多时速能就非常快的下降,有可能打不开网页.
其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量.
查看方法
我们可以用ulimit -a来查看所有限制值
[root@centos5 ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
max nice (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4096
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
max rt priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited||<
其中 "open files (-n) 1024
"是Linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的SOCKET数量,可影响MySQL的并发连接数目).这个值可用ulimit
命令来修改,但ulimit命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效.
系统总限制是在这里,/proc/sys/fs/file-max.可以通过cat查看目前的值,修改/etc/sysctl.conf 中也可以控制.
另外还有一个,/proc/sys/fs/file-nr,可以看到整个系统目前使用的文件句柄数量
查找文件句柄问题的时候,还有一个很实用的程序lsof.可以很方便看到某个进程开了那些句柄.也可以看到某个文件/目录被什么进程占用了.
修改方法
若要令修改ulimits的数值永久生效,则必须修改配置文档,可以给ulimit修改命令放入/etc/profile里面,这个方法实在是不方便,还
有一个方法是修改/etc/sysctl.conf .我修改了,测试过,但对用户的ulimits -a
是不会改变的。只是/proc/sys/fs/file-max的值变了.(我给命令放到rc.local中失败)
我认为正确的做法,应该是修改/etc/security/limits.conf
里面有很详细的注释,比如
* soft nofile 32768
* hard nofile 65536
也可以直接运行下面这个shell。直接copy到你的终端中运行就好了.
echo -ne "
* soft nofile 65536
* hard nofile 65536
" >>/etc/security/limits.conf
就可以将文件句柄限制统一改成软32768,硬65536.配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制
注意.这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning.其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变.
生效
修改完重新登录就可以见到.(我的系统是Centos5.1.修改了,重新登录后就立刻生效.可以用ulimit -a 查看确认.)
如果你使用squid的话,你要在/etc/init.d/squid的文件加入ulimit -HSn 65535.另外,在squid.conf中也要加入max_filedesc 16384
也可在catalina.sh文件里设置:
# -----------------------------------------------------------------------------
JAVA_OPTS='-server -Xms1024m -Xmx2048m -XX:PermSize=64M -XX:MaxPermSize=128m -Duser.timezone=Asia/Shanghai'
#file open ulimit
ulimit -n 65536
分享到:
相关推荐
在 Linux 系统中,进程句柄数设置是一个重要的参数,它决定了单个进程能够打开的最大文件句柄数量,包括 socket 连接。系统默认值为 1024,这对于一般的应用来说已经足够使用。但是,对于需要处理大量请求的应用,如...
此外,Linux 系统中还存在 ulimit 命令,用于控制进程级别的资源使用,包括文件句柄数量、进程数量、core 文件大小等。ulimit 命令可以控制进程可以打开的文件句柄的数量,以免进程打开太多的文件句柄导致“Too many...
- 其他选项分别对应不同的资源限制,例如 `-c` 表示最大核心文件大小,`-d` 表示最大数据段大小,`-n` 表示最大文件句柄数量等。 - `limit` 可以是具体的数字(表示限制值)或者 `unlimited`(表示无限制)。 #### ...
除了进程级别的限制,Linux系统本身也有一个总的文件句柄限制,这个限制决定了整个系统能同时打开的最大文件数量。这个值可以通过读取`/proc/sys/fs/file-nr`文件来获取: ```bash cat /proc/sys/fs/file-nr ``` ...
本文将详细介绍如何在Linux系统中查看当前进程打开的文件句柄数以及如何进行调整的方法。 #### 二、理解文件句柄与限制 在Linux系统中,每个打开的文件或套接字都被分配一个文件句柄。当一个进程尝试打开更多的文件...
文件句柄是操作系统为每一个打开的文件分配的唯一标识,它存储在主内存的一个特定区域,这个区域的大小决定了系统能同时处理多少个文件。由于操作系统需要内存来管理这些句柄,因此对打开文件数量的限制是为了防止...
然而,Linux系统默认对每个进程可打开的文件句柄数量进行了限制,这通常是基于安全性和资源管理的考虑。 #### 三、查看当前文件句柄限制 在Linux中,可以通过`ulimit -n`命令来查看当前用户的进程可打开文件句柄的...
当MySQL数据库尝试建立超过系统允许的文件句柄数量的连接时,就会发生Too many connections错误。这通常是因为Linux的文件句柄限制导致MySQL的最大连接数受到了限制。 Linux系统中用于查看和修改文件句柄限制的命令...
可以使用`ulimit -n`命令查看当前系统的文件句柄限制,并根据需要调整。如果经常遇到此问题,可能需要优化程序以减少打开的文件数量,或者增加系统允许的最大文件句柄数。 解决这类问题的关键在于排查每个环节,从...
"Too many open files" 是一个在Linux系统中常见的错误,主要出现在系统无法处理当前进程中打开的文件句柄数量超过系统设定限制时。该错误通常发生在云服务器上,尤其是在运行复杂应用或服务时。理解这个错误的原理...
#### 四、Linux文件句柄限制机制 在Linux系统中,每个用户可同时打开的文件数量是有上限的。这些文件句柄(也称为文件描述符)用于跟踪每个打开的文件或网络连接等资源。 ##### 4.1 查看系统全局最大文件数限制 ...
例如,`ulimit -n`将显示当前shell会话的文件描述符(句柄)的最大数量。在例子中,这个值是1024,这是系统默认的软限制。硬限制是系统允许的最大值,可以通过`ulimit -Hn`来查看。 要检查某个特定进程当前已经打开...
除了文件句柄限制之外,网络端口的配置也会影响Linux系统的并发处理能力。 ##### 1. 加载模块 通过编辑`/etc/rc.d/rc.local`文件并加入以下内容来确保必要的模块被加载: ```bash # /etc/rc.d/rc.local /sbin/...
Linux系统中调整文件句柄数量的限制通常是通过修改limits.conf文件或者使用ulimit命令来实现。这个调整取决于当前Linux系统的资源和配置。每个系统可能根据自身需求有不同的配置方法。 总结来说,遇到“Too many ...
1. **文件句柄(File Descriptors)**:在Linux中,文件句柄是系统为每一个打开的文件分配的一个数字标识,用来表示该文件在当前进程中的状态。无论是文件、目录、网络套接字(sockets)、设备文件等,一旦被打开,...
文件句柄数限制了系统同时打开文件的数量,这对高并发服务尤为重要。在CentOS 6.5中,我们可以使用`ulimit`命令来临时更改这个限制。`ulimit -n`显示当前最大打开文件数,`ulimit -n 新值`设置新的限制。然而,临时...
系统层面的资源限制包括对所有进程的全局约束,例如最大文件句柄数、PID上限、内存映射空间等。这些通常可以通过内核参数进行调整,例如`file-max`控制最大文件描述符数。对于像Redis这样的高性能数据库服务,调整...
在Linux中,使用`ulimit -n`命令查看和设置单个进程的最大文件句柄数。通过编辑`/etc/security/limits.conf`和`/etc/profile`文件,可以设置全局的最大句柄数。 另外,针对TCP连接,可以调整相关内核参数以优化连接...
添加的参数包括文件句柄数量限制、异步I/O限制、共享内存大小限制、核心消息队列大小以及IP端口范围等。例如,设置共享内存的最大值(kernel.shmmax)为***字节。 4. 为了使/etc/sysctl.conf文件中的更改立即生效,...
本文主要关注Linux系统层面的调优,包括文件句柄、单个用户最大进程数和swap分区的优化,同时介绍了一些常见的Linux面试题。 首先,Linux系统对文件句柄的限制是性能优化的重要一环。默认情况下,系统和进程的文件...