TIME_WAIT过高的处理

TIME_WAIT过高的处理,第1张

相信很多人都遇到过服务器出现大量TIME_WAIT的情况,大多数的解决办法是sysctl修改如下参数

netipv4tcp_timestamps = 1 #上述两项生效的前提是TCP连接两端都要启用TCP时间戳

过一会发现TIME_WAIT数量直线下降后,服务貌似也没出问题,ok问题解决!其实不然。想真正理解所谓“大量的TIME_WAIT的问题”,我们要先理解TIME_WAIT。

TIME_WAIT是有友好的,不是多余的,是主动关闭TCP连接的一方在调用socker的close *** 作后最终会进入TIME_WAIT状态。服务器在处理客户端请求的时候,如果你的程序设计为服务器主动关闭,那么你才有可能需要关注这个TIMEWAIT状态过多的问题。如果你的服务器设计为被动关闭,那么你首先要关注的是CLOSE_WAIT。

换句话说:在一台负载均衡的服务器上(以Nginx为例),客户端向Nginx的请求,作为服务器来看属于被动连接;Nginx向Web服务器的请求属于主动连接。在讨论TIME_WAIT优化时,我们应该关注的是主动连接,即Nginx对Web服务器的连接。

1、防止前一个连接延迟的数据被后面复用的连接错误的接收;

2、可靠的关闭TCP连接;

关于TIME_WAIT作用的深入理解需要配合Socket连接五元组、RFC 793等概念,本文不重点讨论,感兴趣的童鞋请移步 老男孩博客 。

内核里有保存所有连接的一个hash table,这个hash table既包含TIME_WAIT状态的连接,也包含其它状态的连接。主要用于有新的数据到来的时候,从这个hash table里快速找到这条连接。还有一个hash table用来保存所有的bound ports,主要用于可以快速的找到一个可用的端口或者随机端口。

因此,内核保存这些数据必然会占用一定的内存,同理每次找到一个随机端口需要遍历一遍bound ports,必然需要一些CPU时间!

TIME_WAIT很多,既占内存又耗CPU,但其实进一步研究,1万条TIME_WAIT连接,也就多消耗1M左右的内存,对于现在的服务器来说已经不算什么。至于CPU,也不至于因为1万多的hash item就担忧。最起码在TIME_WAIT达到几千的量级上不必过多紧张,因为TIME_WAIT所占用的内存很少很少,同时记录和寻找可用的local port所消耗的CPU也基本可以忽略。

TIME_WAIT的存在是很重要的,如果强制忽略TIME_WAIT,还是有很高的机率,造成数据粗乱,或者短暂性的连接失败。比较直接的现象是,通过NAT后的IP大量访问服务的时候容易出现静置几分钟后连接失败或者多个客户端同时访问有的访问频繁失败的情况。

还有一种情况是:在 客户端-服务器 一对一的时候,没有任何问题,但是当源IP是经过NAT后的地址或服务器在负载均衡器后面时,源地址为同一ip假如恰巧先后两次连接源端口相同,这台服务器先后收到两个包,第一个包的timestamp被服务器保存着,第二个包又来了,一对比,发现第二个包的timestamp比第一个还老——客户端时间不一致。服务器基于PAWS,判断第二个包是重复报文,丢弃之。反映出来的情况就是在服务器上抓包,发现有SYN包,但服务器就是不回ACK包,因为SYN包已经被丢弃了。可用如下命令验证,查看输出里面的 packets rejects in established connections because of timestamp 一项的数量变化。

写了这么多,那么tw_recycle参数到底该怎么用呢?在这里,引用 老男孩博客 里给出的两个典型场景的配置方案作为参考

在这种情况下,因为负载均衡服务器对Web服务器的连接(注意,负载均衡器向Web服务器发起的主动连接),TIME_WAIT大都出现在负载均衡服务器上,所以,在负载均衡服务器上的配置:

在这种情况下,Web服务器变成TIME_WAIT的重灾区。负载均衡对Web服务器的连接,由Web服务器首先关闭连接,TIME_WAIT出现在Web服务器上;Web服务器对DB服务器的连接,由Web服务器关闭连接,TIME_WAIT也出现在它身上,此时,负载均衡服务器上的配置:

>        在实际运用中在当前服务器执行命令后,需要在另一台服务器继续执行某些命令,分开去到另一台服务器执行也是比较麻烦的,因此整理下集中执行的方式

1、首先配置ssh免密 *** 作

Linux 下实现SSH互信: >roxapple:
会不会是ssh
在刀片机上,可以点击三次ctrl进行服务器桌面选择
也可以用mstsc命令进行远程桌面,在win下的运行中
进行0号端口用mstsc /console
别的也不知道了
>ascend - 把自己提升到上一个平台
bind <命令> {命令关键字} - 设置一键命令
clear - 清空控制台
damage - 关闭或者开启伤害 即无敌
descend - 把自己移动到下面一个的平台
destroy [all] - 破坏当前的东西(背包)
defuse [all] - 拆d(拆除已经点燃了的TNT炸药)
diff - X
difficulty - 设置游戏难度
dropstore - 在身边创建一个储物柜
drops - 开关物品掉落,关闭的话采矿打怪不掉东西。
dupe [all] - 复制东西
duplicate [all] - 复制手上的东西并丢出来
explode [范围] - 设置一个地方爆炸(在自家慎用)
extinguish [all] - 熄灭周围所有的火
ext [all] - 一样是熄灭火
falldamage - 开关高空落下伤害
firedamage - 开关火的伤害
fly - 飞行模式
freeze - 冻结怪物
give <物品> [数量] - 给一样物品
goto <名字> - 去一个地方
grow [all] - 让立即小麦成长
h [COMMAND] - 命令列表/帮助
heal - 补指定的血
health - 设置生命值
help [COMMAND] - 命令列表/帮助
home 回到出生点
i <物品代码> [数量] - 刷东西
instantmine - 开关即时采矿(采矿无延迟)
item <物品代码|物品名称> [数量] [费用] 给玩家物品, 如果不指定则是最大的数量
itemname - 显示当前手上的物品名称
itemstack <物品代码> [数量] - 给玩家指定数量的物品
kill 自杀不解释
jump - 瞬移到鼠标所指的地方
killnpc [all] - 杀死周围全部NPC 或者叫 杀了附近所有除自己外的活体生物
l - X
light - 把光永久性关闭
listwaypoints - 列出所有路径点
macro <文件名> {参数} - 允许运行宏
maxstack [物品ID|物品名称|全部] [数量] - 最大的把某物品堆起来
mobdamage - 怪物不会给你伤害
msg <消息> - 添加一个消息到控制台
music [音量] - 播放音乐
noclip - 穿墙
p - 显示当前坐标
pos 现在玩家的坐标
reach - 玩家到指定地方
return - 传送到之前传送的地方
rem - 删除指定路点
removedrops [all] - 删掉地上物品
rename - 修改命令名称
replenish [all] - X
repair [all] - 修复当前物品耐久
reset - 恢复默认设置
s <名字> - Same as /set
search <关键词> - 搜索物品名称
set <名字> - 在这世界标记一个路径点
setjump [JUMP|reset] - 设置跳跃的高度 落地伤害和移动 1:1
setspawn [ ] 设置当前位置 X轴 Y轴 Z轴
setspeed [速度|重置] - 设置移动速度
spawn [QTY] - 产生一个生物
spawnstack {NAME|ID|random} - 产生一个合体的怪物NPC
superheat [all] - Turns items which are furnace-able into their furnaced form
t - Same as /tele
tele - 传送到此坐标
time [set|get|day|night [minute|hour|day [TIME]]] - 设置指定时间得到物品
timeschedule > - 设定一段时间段,让世界永远保持在这段时间之间- - 《凉宫春日漫无止境的八月》
unbind - 解除一个命令
useportal - 传送到地狱
waterdamage - 开关潜水伤害
world设置
world - 世界情报
world load - 加载指定的文件
world save - 保存退出游戏
world seed [SEED] - 给你看看你世界里有多少个方块
world new [FILENAME] [SEED] - 在指定位置创建新地图
world exit - 不保存退出游戏
world list - 列出所有存档 你可以去这看 "minecraft/saves"
= 新命令?
setspawn 设置重生点

FTP说简单一点就是可以进行网络文件共享,可以将你电脑上的资料(一般指的是较大的文件)通过FTP的方式进行公开,也就是将你的电脑设为简单的服务器,并且你自己可以设置访问用户名和密码,只要你的电脑是开机的,不管在哪个地方的人都可以通过网络来访问并下载你共享的文件,前提是要知道你的用户名和密码以及访问的FTP地址

说得很简单了,不知明白没有,上面只是关于FTP的理解,要实际使用,则可以通过专业软件完成,如何你安装完软件,应该你不知道的也就知道了,如FTP的地址是什么,FTP的用户和密码怎么设置,需要共享的文件怎么选择等等

实际方法,说一下简单的方法吧,自己做过的

1、下载一个Serv-U FTP Server V8的专业FTP软件,下载地址baidu搜一下,一大堆

2、查一下它的使用说明,网络也很多,没有的话,直接安装软件,中文版的,里面都有使用说明,你仔细研究一下也就了解了

PS:总的来说,感觉要学习的东西较多,实际上你只要安装软件,问题就都可以解决了,这个软件我自己也用过,很好用,发一张 *** 作界面让你KK吧,打字好多字噢,希望对你有所帮助!

以window系统为例,首先,我们把鼠标移动到左下角的开始,点击开始按钮,找到运行,打开运行后,在输入框里面输入“cmd”,然后按回车键(也就是enter键),随即进入了cmd模式(一个背景为黑色的窗口,里面有一些英文字母)。

打开cmd后,我们看到:C:DucumentsandSettings(有一些朋友的系统使用的不是系统用户的也就不同了,如果你进入window系统使用的用户为user,那这个就换为user)

以mysql50为例,mysql的安装目录在c盘的ProgramFiles目录里面的MySQL里面的MySQLServer50(也就是C:ProgramFilesMySQLMySQLServer50),那么,我们就准备要进入这个目录里面了。

步骤如下:C:DucumentsandSettingscd(回车键)出现下面:C:第二步:C:cdC:ProgramFilesMySQLMySQLServer50in(回车键)

出现:C:ProgramFilesMySQLMySQLServer50in

第三步:(连接mysql服务器)

C:ProgramFilesMySQLMySQLServer50inmysql-hlocalhost-uroot-p(回车键)

(上面的-hlocalhost是指使用本地用户来连接,-uroot是指使用用户名为root的用户来连接,-p是指空密码,一般初学者都还没有设置root的用户密码的,如果你在安装mysql50时候配置了服务器后,第一个要您设置root的密码,请你记住,把它填入上面的-p之后)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10691589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存