由ftp传输脚本引发的服务器内存问题

本文讲述了如何定位并解决因大量重复FTP进程导致服务器内存使用率持续升高的问题。通过调整FTP模式,成功避免了内存泄漏。

由于近期不断收到告警邮件,提示某服务器的内存使用率已经超过90%,便去查看zabbix监控,通过监控图,发现内存使用率是呈上涨趋势的,如此下去,内存枯竭是必然的事。并且,这种持续上涨的问题,增加内存并不是根本的解决方法,于是,就有了下面的探索之旅。
监控如图所示:
由ftp传输脚本引发的服务器内存问题


首先,登录服务器,使用 “top” 命令查看当前较为占用内存的进程,发现排在前十的进程所占用的总内存也只有50%左右。于是,又通过 “ps aux” 命令查看所有进程,发现存在大量重复的进程,就是ftp进程,统计了一下,大约有3000多条,我想,这应该就是导致内存使用率持续升高的原因了。
由ftp传输脚本引发的服务器内存问题

ftp是由crontab定时运行的,每15分钟执行一次传输任务,所以会产生这么多进程也不奇怪。问题是,为什么传输完成后进程也不会结束呢?难道ftp会话一直没有关闭吗?于是,手动执行ftp传输脚本,使用调试模式进行观察,发现脚本运行过程中果然出现问题了 "passive mode refused" 。

问题截图如下:
由ftp传输脚本引发的服务器内存问题

先使用如下命令把有关ftp的进程全部杀掉,然后观察内存使用情况,发现内存使用率马上就降下来了:

for i in ps aux |grep "ftp -n" |grep -v grep |awk '{ print $2 }'; do kill -9 $i;done

由ftp传输脚本引发的服务器内存问题

现在要解决的问题就是怎么才能让ftp进程在传输完成后正常结束,再次模拟了一下,确认了问题点:
由ftp传输脚本引发的服务器内存问题

问题提示为"passive mode refused",ftp分为两种传输模式,主动模式和被动模式,ftp默认使用被动模式。联想到前段时间ftp服务端做了严格的端口访问限制,应该是只放通了21端口。因为ftp被动模式需要服务端也提供一个随机端口给客户端访问,用以数据传输,所以现在ftp可以建立连接,但是不能进行数据传输。既然如此,将被动模式改为主动模式试一下:
由ftp传输脚本引发的服务器内存问题
由ftp传输脚本引发的服务器内存问题

脚本执行过程中,提示ftp被动模式关闭,然后文件能正常传输,在整个脚本执行完后,再查看进程,没有发现残留的ftp进程。如此,也可以推断,ftp服务端是开启了20和21端口给客户端服务器访问。
至此,问题解决,后续将持续观察。

转载于:https://blog.51cto.com/12410094/2125047

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值