网站链接数居高不下导致服务器卡死的情况排查

最近系统突然出现卡顿的情况,通过终端检查发现一些链接数特别高,但是一直降不下来,中途也尝试过将apache的参数调整但是一直解决不了问题。

为了解决卡住的问题做过几次尝试:

排查1
1.检查服务器硬盘容量是否用完。结果剩余空闲空间占比为80%,正常。
2.检查服务器内存使用量,16G内存使用了15G。调整服务器内存到32G。
3.检查服务器网卡工作模式速度是否正常。结果网卡速度为1000兆,正常。
4.检查防火墙配置及生效策略情况。结果为正常。

排查2:检查Apache配置。
1.检查apache配置中工作模式为 prefork 模式,调整客户端连接数最大值到20000,大约三个小时左右会用满,按这个结果意味着根本原因不在这里。
2.排查apache配置中keepAlive配置,默认是关闭的。我打开配置后,排查并没有好转。理论上所有链接超时后之后应该是会断开的。
3.排查TCP连接情况:watch -n 1 -d “ss|grep http”
通过分析链接数情况,了解大部分应该是门禁设备导致的,印象中之前链接数应该是很低的,为何突然最近出现问题,让我回想起前两天调整过数据库服务器防火墙策略。

排查3:检查apache网站的访问日志和错误日志。
通过排查apache错误日志,发现存在大量的数据库连接报错(此时此刻应该想到前两天防火墙策略调整的时间点刚好契合)。配合前面的门禁设备链接数不下降的问题,确认应该是门禁设备一直尝试提交数据但是数据库服务器没有回应,所以链接数一直增加。

通过排除数据库防火墙导致连接失败的问题,随之tcp连接数超高的问题也解决了。

总结:通过不停地尝试解决,从最基本的配置参数查起,再到错误日志,结合最近网络或者是防火墙的调整,大概能知道问题在哪里。

FTP服务器主动模式与被动模式

一、FTP协议及端口

FTP只通过TCP连接,没有用于FTP的UDP组件。FTP不同于其他服务的是它使用了两个端口,一个数据端口和一个命令端口。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。

 

二、主动模式和被动模式

主动模式(active mode)也称为标准模式,被动模式(passive mode),两种模式主要体现在数据传输时候的发起方不一样,导致服务器需要开放的端口也不一样。

 

主动模式下,当完成认证之后准备传输数据时,客户端发送命令PORT xxxx,服务器主动连接客户端指定的端口号,客户端开放的端口是随机选择的。此时,服务器防火墙需要开放的两个TCP连接端口为21、20端口。

 

被动模式下,当完成认证之后准备传输数据时,客户端认证完成发送命令PASV,此时服务器会自动打开两个随机端口并发送PORT xxxx命令给客户端,然后客户端发起从本地端口到服务器的端口xxxx的连接用来传送数据。在被动模式下,服务器需要开放端口包括21以及1024到65535之间的端口号。

 

IIS下的FTP服务,默认开启的是主动模式,需要设置服务器防火墙开放TCP协议20、21端口供FTP使用。

 

三、客户端连接FTP模式切换

IE浏览器以及我的电脑,设置IE浏览器打开“Internet 选项”,找到高级下的“浏览”节点,将“使用被动FTP(用于防火墙和DSL调制解调器的兼容)”的勾选去掉。

设置以上完成之后,可以在我的电脑上直接浏览FTP服务器。

 

Filezilla 客户端设置主动模式:

打开filezilla 客户端,选择菜单【文件】-【站点管理】-【传输设置】,单选中间的主动模式即可。

四、防火墙NAT服务器IP问题

对于服务器使用内网IP地址,然后通过防火墙NAT出去的,需要设置服务器外网对应的IP地址。

Windows服务器IIS中,通过设置防火墙支持来完成:

在Filezilla server中,点击设置进入如下界面设置对应开放的端口号范围以及外网IP地址:

我遇到的情况是在windows 2008 服务器上,本省服务器防火墙可以开放任意端口,但是在外设防火墙下做了NAT转换,本身开放的端口也就只能是21和20端口,其他端口没有自动开启,导致外部连接只能通过主动模式。这样的方式就是在于对一般用户,他没办法选择任何工具自动连接FTP服务器,需要选择主动模式才行。