首先我们来看看如何识别一个TCP连接?系统由一个四元组(srcip、srcport、dstip、dstport)标识,即源IP、源端口、目的IP、目的端口。比如我们有一个服务192.168.0.1,开放了80端口,那么所有的客户端都会连接到这个服务的80端口。有个误区就是我们常说一台机器有65536个端口,那么承载的连接数就是65536,这种说法是极其错误的,混淆了源端口和访问目标端口。我们在做压测的时候,使用的是压测客户端。这个client的连接数受端口数的限制,但是server端的连接数可以达到几万,通常是几百万(4C8G配置)。上限取决于优化程度。具体方法如下:我们正在对目标服务器进行压力测试,想看看负载下的连接数。当我们按到一定数量时,控制台突然报“toomanyopenfiles”。这是因为Linux系统每创建一个TCP连接,都会创建一个套接字句柄,而每个套接字句柄就是一个文件句柄。操作系统对打开文件句柄的数量有限制。Unix/Linux的基本哲学之一是“一切皆文件”。要增加TCP负载能力,需要调整文件句柄。第一步:修改文件句柄数限制#查看当前用户允许TCP打开的文件句柄***numberulimit-n#修改文件句柄vim/etc/security/limits.conf*softnofile655350*hardnofile655350修改后,退出终端窗口,重新登录(无需重启服务器),即可看到***结果。这是优化的第一步,修改文件句柄限制。注:softnofile(软限制)是指linux进一步限制用户同时打开的文件数在当前系统可以承受的范围内,hardnofile(硬限制)是系统根据系统硬件计算出来的资源状态(主要是系统内存)最大同时打开文件数通常软限制小于等于硬限制第二步:TCP参数调优从上面的配置参数我们可以知道在Linux内核中,为tcp发送和接收创建了缓冲队列,可以提高系统吞吐量。以上参数定义在/etc/sysctl.conf文件中。某些参数可能未在文件中定义。系统已给出默认值。如果需要修改,直接在文件中添加或修改,然后执行sysctl-p命令使其生效。