如何确定在服务器上造成高带宽使用率的原因

我有一个运行在VPS上的MySQL数据库服务器。 服务器通过专用networking接口连接到Web服务器,除SSH和PHPMyAdmin安装外,没有公共服务。

前段时间,我安装了一个Monit规则来检查公共networking接口(AKA,而不是MySQL数据经过的那个)上的exceptionstream量:

# Monitor network connection check network public with interface eth1 if failed link then alert if changed link then alert if saturation > 90% then alert if download > 10 MB/s then alert if total upload > 1 GB in last hour then alert 

几个月前,我开始感到由这个规则触发的Monit警报:

 Upload bytes exceeded Service public Date: Tue, 04 Apr 2017 13:11:55 Action: alert Host: myhostname.com Description: total upload 1.0 GB matches limit [upload rate < 1024.0 MB in last 1 hour] Your faithful employee, Monit 

这些警报并不真正与服务器上使用的任何尖峰相关联,而且由于没有真正的面向公众的服务,所以我无法想象可能会对这个上传带宽量负责。 磁盘空间似乎也没有被使用。

我怎样才能找出是什么导致1GB +的“东西”上传,什么是上传,从哪里?

听起来像是正在运行某种定期的SELECT查询,它将数据从公共接口转储出去。

Wireshark,pcap或其他数据包监听的变体将显示源(SQL服务器)和目标,使用的端口/协议等等。 零端口3306(TCP或UDP),即MySQL端口。

如果系统上有很多的磁盘空间,你可以设置你的数据包监听,将包含networkingstream量的pcap文件保存到你的公共接口。

我build议假脱机模式,比如说10GB,分成2GB的文件,这样你就不会再使用那么多的空间了,但是你应该至less可以捕获其中一个上传文件(或者至less启动它)。 这可能需要一两个小时,或者只有几分钟的时间,但是使用这种方法你总是会有至less8GB的完整对话(最后一个文件将会是<2GB,并且是最新的数据)。

一旦你知道发生了什么,你可以采取措施缓解。 马上,我build议closures公共端口上的端口3306,并在MySQL的权限内locking“May run queries”。 那会锁上谷仓的门。

一个可能的方法来确定从MySQL端发生的事情是启用缓慢的查询日志,然后build立一个真正的低门槛来捕捉每个语句。 然后,您可以查看慢速查询日志以查看当时正在运行的内容。

另一种方法是定期转储“显示完整进程列表\ G”。 这将更容易看到在给定的时间运行。