一台 Linux 服务器最多能支撑多少个 TCP 连接?

一台 Linux 服务器最多能支撑多少个 TCP 连接?一台Linux机器上最多能建立多少个TCP连接?

困惑很多人的并发问题

我发现有很多同学对一个基础问题始终是没有彻底搞明白。那就是一台服务器最大究竟能支持多少个网络连接?我想我有必要单独发一篇文章来好好说一下这个问题。

很多同学看到这个问题的第一反应是65535。原因是:“听说端口号最多有65535个,那长连接就最多保持65535个了”。是这样的吗?还有的人说:“应该受TCP连接里四元组的空间大小限制,算起来是200多万亿个!”
如果你对这个问题也是理解的不够彻底,那么今天讲个故事讲给你听!

一次关于服务器端并发的聊天

"TCP连接四元组是源IP地址、源端口、目的IP地址和目的端口。任意一个元素发生了改变,那么就代表的是一条完全不同的连接了。拿我的Nginx举例,它的端口是固定使用80。另外我的IP也是固定的,这样目的IP地址、目的端口都是固定的。剩下源IP地址、源端口是可变的。所以理论上我的Nginx上最多可以建立2的32次方(ip数)×2的16次方(port数)个连接。这是两百多万亿的一个大数字!!"

"进程每打开一个文件(linux下一切皆文件,包括socket),都会消耗一定的内存资源。如果有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。所以linux系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。这三个限制的含义和修改方式如下:"

  • 系统级:当前系统可打开的最大数量,通过fs.file-max参数可修改
  • 用户级:指定用户可打开的最大数量,修改/etc/security/limits.conf
  • 进程级:单个进程可打开的最大数量,通过fs.nr_open参数可修改

"我的接收缓存区大小是可以配置的,通过sysctl命令就可以查看。"

sysctl -a | grep rmem
net.ipv4.tcp_rmem = 4096 87380 8388608
net.core.rmem_default = 212992
net.core.rmem_max = 8388608

"其中在tcp_rmem"中的第一个值是为你们的TCP连接所需分配的最少字节数。该值默认是4K,最大的话8MB之多。也就是说你们有数据发送的时候我需要至少为对应的socket再分配4K内存,甚至可能更大。"

"TCP分配发送缓存区的大小受参数net.ipv4.tcp_wmem配置影响。"

sysctl -a | grep wmem
net.ipv4.tcp_wmem = 4096 65536 8388608
net.core.wmem_default = 212992
net.core.wmem_max = 8388608

"在net.ipv4.tcp_wmem"中的第一个值是发送缓存区的最小值,默认也是4K。当然了如果数据很大的话,该缓存区实际分配的也会比默认值大。"

服务端百万连接达成记

“准备啥呢,还记得前面说过Linux对最大文件对象数量有限制,所以要想完成这个实验,得在用户级、系统级、进程级等位置把这个上限加大。我们实验目的是100W,这里都设置成110W,这个很重要!因为得保证做实验的时候其它基础命令例如ps,vi等是可用的。“

活动连接数量确实达到了100W:

ss -n | grep ESTAB | wc -l  
1000024

当前机器内存总共是3.9GB,其中内核Slab占用了3.2GB之多。MemFree和Buffers加起来也只剩下100多MB了:

cat /proc/meminfo
MemTotal:        3922956 kB
MemFree:           96652 kB
MemAvailable:       6448 kB
Buffers:           44396 kB
......
Slab:          3241244KB kB

通过slabtop命令可以查看到densty、flip、sock_inode_cache、TCP四个内核对象都分别有100W个:

结语

互联网后端的业务特点之一就是高并发. 但是一台服务器最大究竟能支持多少个TCP连接,这个问题似乎却又在困惑着很多同学。希望今天过后,你能够将这个问题踩在脚下摩擦!

转载于 https://mp.weixin.qq.com/s/Lkyj42NtvqEj63DoCY5btQ

Linux 磁盘自检设置

Linux 磁盘自检设置
Linux磁盘自检可以通过自行设置自检时间间隔,自动对硬盘进行检测,第一时间监测硬盘的健康状况,提高硬盘可靠性。
不同的文件系统(xfs,reiserfs,ext4)都有自己的检测和修复工具,本文讲解ext4文件系统的磁盘自检设置方法。
1、检查指定硬盘的文件系统:
df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 xfs 32G 3.3G 29G 11% /
devtmpfs devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs tmpfs 7.8G 17M 7.8G 1% /run
tmpfs tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/sdb5 ext4 631G 297G 303G 50% /data
tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/0

或者blkid /dev/sdb5
# blkid /dev/sdb5
/dev/sdb5: UUID="5e1f3504-8808-4ebb-82be-c318fcbd6d63" TYPE="ext4"

2、查看/etc/fstab确认挂载分区

3、查看相应硬盘的文件系统的自检时间
通过下面的命令可以显示ext文件系统相关参数:
tune2fs -l /dev/sdb5
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:
Last mounted on: /data
Filesystem UUID: 5e1f3504-8808-4ebb-82be-c318fcbd6d63
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 42000384
Block count: 167975624
Reserved block count: 8398781
Free blocks: 92897263
Free inodes: 42000355
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 983
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Mon Aug 7 16:04:19 2017
Last mount time: Thu Nov 30 15:02:15 2017
Last write time: Thu Nov 30 15:02:15 2017
Mount count: 12
Maximum mount count: 39
Last checked: Mon Aug 7 16:04:19 2017
Check interval: 15552000 (6 months)
Next check after: Sat Feb 3 16:04:19 2018
Lifetime writes: 10 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 17716f76-ff63-402e-9ecd-00b0e400f6f0
Journal backup: inode blocks
或者
tune2fs -l /dev/sdb5 | grep 'Check interval'

4.修改Check interval自检间隔时间
Check interval指的是文件系统间隔多长时间进行一次完整性检查,您可以根据您的需要通过下面的命令手工指定:

tune2fs –i 30/dev/sdb5
其默认的单位是天,其他可用的单位有12m(12个月),7w(7周)

重新定向(Redirects)

Redirects
一、重定向类型 — 临时或永久
302临时重定向
301永久重定向
二、在“重定向至(redirects to)”区域填写你希望重定向至的URL(必须注明协议类型,如http://、https://等)
三、选择www.重定向(www.redirection)
(1)“只能使用 www 重定向”,那么只有当客户访问带有 www 的页面时才会被重定向至新的页面
(2)“使用或不用 www 重定向”,那么当客户访问带有 www 或不带 www 的页面时都被重定向至新的页面
(3)“不要重定向 www”,那么当客户访问带有 www 的页面时将不会被重定向至新的页面
(4)“外卡(Wild Card)”重定向 ,将会重定向所有目录到拥有相同文件名的新目录下。
例如:bbs.h3cne.cn 重定向至 wp.h3cne.cn, 当客户访问 bbs.h3cne.cn/pic.jpg 将会被重定向至wp.h3cne.cn/pic.jpg.
(不外卡)
http://wp.h3cne.cn/wp-content/uploads/2014/01/Inpaint.png
http://bbs.h3cne.cn/wp-content/uploads/2014/01/Inpaint.png (无法打开)
(外卡)
http://links.h3cne.cn/wp-content/uploads/2014/01/Inpaint.png (自动跳转)
http://wp.h3cne.cn/wp-content/uploads/2014/01/Inpaint.png

Redirects