在Linux下面部 署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题;这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用 其实很容易就达到这个数量。下面说的是,如何通过正解配置来改正这个系统默认值。因为这个问题是我配置Nginx+php5时遇到了,所以我将这篇归纳进 nginx+apache篇。
查看方法
我们可以用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命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效(在布署Nginx+FastCGI我就 遇到这个问题,将ulimit -SHn 65535放到/etc/rc.d/rc.local也没起什么作用)
系统总限制是在这里,/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的值变了。
我认为正确的做法,应该是修改/etc/security/limits.conf
里面有很详细的注释,比如
* soft nofile 32768
* hard nofile 65536
就可以将文件句柄限制统一改成软32768,硬65536。配置文件最前面的是指domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制。
注意:这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning;其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变。
生效
因为我平时工作最多的是部署web环境 (Nginx+FastCGI外网生产环境和内网开发环境),重新登陆即可(reboot其实也行)我分别用root和www用户登陆,用ulimit -a分别查看确认,做这之前最好是重启下ssh服务,service sshd restart。
- 浏览: 37906 次
相关推荐
### Linux ulimit 的使用 `ulimit` 是一个在 Linux 和其他类 Unix 操作系统中常用的命令行工具,用于设置或显示对当前 shell 进程...正确理解和使用 `ulimit` 命令,对于系统管理员和开发人员来说都是非常必要的技能。
Linux系统管理是一门涉及Linux操作系统安装、配置、维护和优化的学问。其核心在于理解Linux内核以及各类Shell命令的使用,以达到有效管理用户、文件系统、权限、服务和网络的目的。从提供的文件内容中,我们可以提炼...
在Linux操作系统中,Socket是进程间通信的一种方式,它提供了网络通信的能力。Socket的最大连接数是一个重要的系统资源限制,关乎到服务器的并发处理能力。本文将深入探讨如何获取和修改Linux Socket的最大连接数,...
ArcGIS Server 10.2.2 for Linux 安装配置 ArcGIS Server 是 ESRI 公司开发的一款基于 Web 的地理信息系统服务器软件,主要用于提供地理信息服务、地图服务、任务服务、数据服务等功能。下面是 ArcGIS Server ...
在IT领域,Oracle 11g RAC (Real Application Clusters) 是一种高可用性和可扩展性的数据库解决方案,尤其适用于Windows平台上运行的Linux系统。RAC允许多个实例同时访问同一数据库,提供故障切换和负载均衡,确保...
需要加入的命令行是检查当前登录用户是否为oracle,如果是,则根据其使用的shell类型来设置对应的ulimit值。 6. 创建安装Oracle所需的目录,并设置相应的权限。这通常包括数据库软件目录和数据文件存放目录。例如,...
- 完成系统安装后,确保进行必要的网络配置,包括IP地址、子网掩码、默认网关以及DNS设置,以保证系统能够正常访问互联网。 3. **网络配置**: - 使用`ifconfig`命令检查网络接口状态,并使用`vi`或`nano`编辑...
本文档是一份关于Linux运维技术的详细笔记,包含了Linux系统安装后的基本优化、系统服务配置、服务器管理工具应用、网络文件系统(NFS)的部署与应用、以及Apache和Nginx这两个流行的Web服务器的详细配置和应用案例...
安装前的环境准备是至关重要的,因为不正确的配置可能导致安装失败或系统不稳定。 "安装前环境脚本"通常包含了一系列的准备工作,例如: 1. **用户和组设置**:创建一个用于运行Oracle服务的特定用户(如oracle)和...
系统管理是 Linux 系统中非常重要的一方面,正确地使用系统管理命令可以实现系统的配置和维护。以下是一些常用的系统管理命令: 1. uname 命令 uname 命令可以显示当前系统的信息,包括系统名称、版本号、机器名称...
通过执行`ulimit -a`命令可以查看当前系统对各种资源的限制值,在默认情况下,Linux系统的最大进程数(nproc)和打开文件描述符数(nofile)通常被设置为1024,这对于大多数应用来说可能并不足够,特别是在高并发的...
这一过程主要包括三个关键步骤:一是配置系统以捕获崩溃并生成core dump文件;二是安装合适的GDB版本;三是确保使用的库文件中包含了Debug符号表,以便于GDB能够读取这些信息进行调试。 #### 一、系统设置捕获dump ...
在安装Oracle之前,还需要对Linux系统的某些配置文件进行修改,以满足Oracle的安装要求。 ##### 3.1 修改系统参数文件 1. **/etc/sysctl.conf**:增加或修改以下行: ```ini kernel.shmmax = 2147483648 kernel...
Linux操作系统环境下安装和配置WebLogic中间件涉及到一系列详细步骤,包括前期准备工作、安装软件、建立域、节点管理、操作系统参数调整和脚本编写等。WebLogic是由Oracle公司开发的针对企业级应用的中间件产品,常...
在安装 LoadGenerator 之前,我们需要优化 Linux 系统,以便 LoadGenerator 能够正常运行。首先,我们需要编辑 `/etc/security/limits.conf` 文件,增加或修改以下配置: * soft nproc 131072 * hard nproc 131072 ...
在本文中,我们将深入探讨如何在Linux环境下配置Websphere 6.1,这是一个历史悠久但仍然广泛应用的企业级Java应用程序服务器。以下是一步步的详细指南: 1. **软件包检查与安装**: 在开始安装Websphere之前,需要...
Linux系统提供了一些高级功能,例如ulimit命令用于管理系统资源,如最大文件大小、进程数等限制。Linux上传下载小工具如lrzsz,可以简化文件的传输。rsync是一个常用的文件同步工具,它可以通过与inotify结合实现...