在Linux下面部署应用的时候(比如进行ab并发压力测试),有时候会遇上socket: Too many open files (24)的问题,比如还有Squid做代理,当文件打开数到900多时速能就非常快的下降,有可能打不开网页。
其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器其实很容易就达到这个数量。
查看方法
我们可以用ulimit -a来查看所有限制值
- [root@haproxy2 ~]# ulimit -a
- core file size (blocks, -c) 0
- data seg size (kbytes, -d) unlimited
- scheduling priority (-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) 5000
- pipe size (512 bytes, -p) 8
- POSIX message queues (bytes, -q) 819200
- real-time 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.6,修改了,重新登录后就立刻生效,可以用ulimit -a 查看确认。)
如果你使用squid的话,你要在/etc/init.d/squid的文件加入ulimit -HSn 65535.另外,在squid.conf中也要加入max_filedesc 16384。
分享到:
相关推荐
修改 `UserLoginShell` 项以启用对 SSH 登录用户的资源限制,并确保 `UserLoginShell` 的值为 `/bin/bash` 或其他支持 `ulimit` 的 shell。 3. **编辑 `/etc/profile` 文件**: ``` vi /etc/profile ``` 在此...
在 CentOS 7 系统中,网络配置的管理方式与早期版本有所不同,主要采用了 Network Manager 这一服务来管理网络接口。有时,我们可能会遇到修改 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件后,...
### CentOS安装中文语言包的方法 在CentOS系统中,安装中文语言包是一项常见的需求,尤其对于需要使用中文环境的用户来说。本文将详细介绍如何在CentOS系统上安装中文语言支持包,并确保系统的语言环境能够正常显示...
标题"centos5 centos6 epel.rpm包下载"涉及的主要知识点是EPEL RPM包在CentOS 5和CentOS 6上的安装。EPEL仓库包含了许多在默认CentOS仓库中找不到的软件和更新,例如开发工具、网络服务和系统管理工具。`epel-...
VirtualBox 安装 CentOS 5 VirtualBox 是一款功能强大且免费的虚拟机软件,允许用户在单个物理机器上运行多个操作系统。...通过图形界面安装或字符界面安装,我们可以快速地安装 CentOS 5,并进行基本配置。
CentOS5中DNS服务器配置 Dns服务器的搭配文件的配置
总结来说,"CentOS Linux 中文包"旨在解决CentOS中缺少中文支持的问题,通过安装相应的RPM包和调整系统配置,用户可以方便地在CentOS环境下进行中文输入和阅读。这个过程涉及了RPM包管理、区域和语言设置、输入法...
在 CentOS7 或其他 Linux 发行版中,有时我们需要调整系统的时间设置以满足特定的应用需求或进行系统功能测试。临时修改时间较为简单,但如何确保系统重启后仍然保持所设定的时间,则需要通过特定的步骤来实现。本文...
本文将详细解释如何解决CentOS中的中文乱码问题,并提供具体的步骤和命令来帮助用户顺利完成配置。 #### 一、问题背景 在使用CentOS系统时,如果系统默认的语言环境不支持中文或者某些中文字体未被正确安装,就会...
可以根据需要调整SS5的性能,例如修改ulimit的值,调整系统的网络连接数。 九、修改SS5启动权限 需要修改SS5的启动权限,添加执行权限,确保SS5可以正常启动。 十、启动SS5并检查状态 使用systemctl命令启动SS5...
文档中包含CentOS5到CentOS7的百度云盘连接地址。保证有效
CentOS5中vsftp虚拟用户配置 CentOS5中vsftp虚拟用户配置是一种常见的文件服务器配置方式,本文将介绍在CentOS5.3下vsftp虚拟用户配置的实例,该配置方式可以在CentOS5中通用。 vsftp虚拟用户配置的主要步骤 1. ...
总结一下,在CentOS中安装中文字体并解决乱码问题,主要包括以下步骤:安装转换工具、转换字体文件、创建字体目录、更新字体缓存、修改系统配置以及应用级别的字体设置。通过这些步骤,CentOS将能够正确显示中文字符...
python-urlgrabber-3.1.0-6.el5.noarch.rpm、yum-3.2.22-39.el5.centos.noarch.rpm、yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm、yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm、yum-updatesd-0.9-2....
CentOS+CentOS 5系统管理=CentOS qq群:55434644
最直接的方法是调整OpenOffice的字体设置,使其能够调用CentOS系统中已存在的字体。然而,考虑到CentOS字体库的局限性,这种方法可能无法提供满意的解决方案。 #### 方法二:导入Windows XP字体 更为彻底且有效的...
CentOS 5 yum源,163 yum源,shouhu yum源
本文将详细介绍如何在CentOS系统中安装中文输入法,并确保能够正常使用拼音输入法。 #### 二、准备工作 在安装中文输入法之前,需要确保CentOS系统的环境已经准备妥当: 1. **系统版本确认**:确认当前使用的...
CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源...两者的不同,在于CentOS并不包含封闭源代码软件