1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 修改Linux系统最大TCP连接数限制

修改Linux系统最大TCP连接数限制

时间:2019-07-06 17:17:02

相关推荐

修改Linux系统最大TCP连接数限制

修改Linux系统最大TCP连接和UDP数限制

前提:拥有Root权限

系统的默认配置是足以满足日常使用的,但是在进行高并发的网络编程时,超出连接个数会遇到最大打开文件数限制报错、无法创建新连接(超出最大进程数)、系统资源分配报错

1、修改最大用户进程数和最大文件数限制

ulimit 的作用

ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何的超越都导致进程的终止。

-> ulimit -a# -a 列出所有当前资源极限core file size(blocks, -c) 0#-c 设置core文件的最大值.单位:blocksdata seg size (kbytes, -d) unlimited#-d 设置一个进程的数据段的最大值.单位:kbytesscheduling priority (-e) 0#file size(blocks, -f) unlimited#-f Shell 创建文件的文件大小的最大值,单位:blockspending signals (-i) 385862#max locked memory (kbytes, -l) unlimited#-l 可以锁住的物理内存的最大值max memory size (kbytes, -m) unlimited#-m 可以使用的常驻内存的最大值,单位:kbytesopen files (-n) 300000#-n 每个进程可以同时打开的最大文件数pipe size (512 bytes, -p) 8#-p 设置管道的最大值,单位为block,1block=512bytesPOSIX message queues(bytes, -q) 819200#real-time priority (-r) 0#stack size (kbytes, -s) 8192#-s 指定堆栈的最大值:单位:kbytescpu time(seconds, -t) unlimited#-t 指定每个进程所使用的秒数,单位:secondsmax user processes (-u) 655360#-u 可以运行的最大并发进程数virtual memory(kbytes, -v) unlimited#-v Shell可使用的最大的虚拟内存,单位:kbytesfile locks (-x) unlimited#

修改最大线程数和最大文件数限制

-> vim /etc/security/limits.conf # 添加如下的行* soft noproc 65535* hard noproc 65535* soft nofile 65535* hard nofile 65535

其中:

noproc代表用户最大线程数限制nofile代表最大打开文件数限制" * "代表对所有用户生效

对于最大打开文件数限制只需要更改上面的参数即可,但对于用户最大线程数限制还需要根据系统不同修改以下文件

centos7系统下操作

在centos7系统中,ulimit下面的nproc的数值是通过 /etc/security/limits.d/20-nproc.conf 来控制的

-> cat /etc/security/limits.d/20-nproc.conf*soft nproc1024root soft nprocunlimited

需要编辑 /etc/security/limits.d/20-nproc.conf 文件将限制值改大

2、设置系统对该用户的资源限制

在修改/etc/pam.d/login文件中加入如下内容:

-> sudo vim /etc/pam.d/login# 加入如下内容session required /lib/security/pam_limits.so

这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件。

3、修改网络内核对TCP/UDP连接的限制

在Linux上编写支持高并发TCP连接的客户端通讯处理程序时,有时会发现尽管已经解除了系统对用户同时打开文件数的限制,但仍会出现并发TCP连接数增加到一定数量时,再也无法成功建立新的TCP连接的现象。

Linux内核编译时默认设置的本地端口号范围可能太小,因此需要修改此本地端口范围限制。

内核参数的优化

修改/etc/sysctl.conf文件,/etc/sysctl.conf 是用来控制linux网络的配置文件,对于依赖网络的程序(如web服务器和cache服务器)非常重要

-> sudo vim /etc/sysctl.conf # 将原内容批注并写入如下内容net.ipv4.ip_local_port_range = 1024 65535net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 65536 16777216net.ipv4.tcp_fin_timeout = 10net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_timestamps = 0net.ipv4.tcp_window_scaling = 0net.ipv4.tcp_sack = dev_max_backlog = 30000net.ipv4.tcp_no_metrics_save = 1net.core.somaxconn = 10240net.ipv4.tcp_syncookies = 0net.ipv4.tcp_max_orphans = 262144net.ipv4.tcp_max_syn_backlog = 262144net.ipv4.tcp_synack_retries = 2net.ipv4.tcp_syn_retries = 2

修改完以后执行:

sysctl -p /etc/sysctl.conf

sysctl -w net.ipv4.route.flush=1

使得配置生效(亲测对TCP和UDP都适用)

至此操作完成。如果没有生效,那么就 reboot 。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。