众所周知在默认参数情况下linux对高并发支持并不友好,主要受限于单进程最大打开文件数限制,内核tcp参数方面和io时间分配机制等,下面从几个方面来调整是linux系统能够支持高并发环境。
1.iptables相关
如非必要,关掉或卸载iptables防火墙,并阻止kernel加载iptables模块。这些会影响并发性。
2.单进程打开文件数限制
一般发行版,限制单进程最大可以打开1024个文件,这是远远不能满足高并发需求的,调整过程如下:
ulimit -n 查询当前数值,ulimit -n 65535设为最大值
如果输出“Operationnotpermitted”之类,说明修改失败,实际上是因为指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制,因此就需要修改Linux系统对用户关于打开文件数的软限制和硬限制。
第一步修改limits.conf,并添加
其中*号表示修改所有用户限制,soft或hard指定要修改软限制或硬限制;65536则指定了想要修改的新的限制,即最大打开文件数(请注意软限制要小于或等于硬限制)。修改完保存文件。
第二步修改/etc/pam.d/login文件,在文件中添加如下行:
这是告诉Linux在用户完成系统登录后,在应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改后保存此文件。
第三步查看linux系统级的最大打开文件数限制,使用如下命令:
cat/proc/sys/fs/file-max
输出:ex:32568
这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件总和)32568个文件,是linux系统的硬限制,所有用户级的打开文件数限制都不应超过这个数值。通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不应该修改此限制。修改此限制的方法是修改/etc/sysctl.conf文件内fs.file-max=131072,这是让linux启动后强行将系统级打开文件数硬限制设置为131072。修改完成后保存文件。
完成上述步骤后重启系统,一般情况下就可以将Linux系统对指定用户的单一进程允许同时打开的最大文件数限制设为指定的数值。如果重启后用ulimit -n命令查看用户可打开文件数限制仍然低于上述步骤中设置的最大值,这可能是因为在用户登录脚本/etc/profile中使用ulimit -n命令已经将用户可同时打开文件数做了限制。由于通过ulimit -n修改系统对用户可同时打开文件的最大数限制时,新修改的值只能小于或等于上次ulimit -n设置的值,因此想用此命令增大这个限制值是不可能的。所以如果有上述问题存在,就只能去打开/etc/profile脚本文件,在文件中查询是否使用了ulimit -n限制了用户可同时打开的最大文件数量,如果找到,则需要删除这条命令,或者将其改为合适的值,然后保存文件用户退出并重启。
通过上述步骤,就为支持高并发TCP连接处理的通讯处理程序解除关于打开文件数量方面的限制。