我们有一个小型网络(高峰营业时间可能有 15 个用户,大约 30 台设备)管理互联网连接和电话线。
网络的主要用途是让用户访问基于 Web 的外部托管数据库界面,以便管理业务(客户、销售、发票等)。这个基于 Web 的数据库界面是一个 php/mysql 应用程序,开发时间是过去的一年半。作为主要(如果不是唯一)程序员,我可以访问有关此应用程序和我们网络的一切,从我们的托管解决方案到源代码再到技术选择。
几个月前,我们注意到使用数据库界面进行的点击中大约有 5% 的速度非常慢。我的意思是,大多数点击会在一到两秒内提供内容,但有时,其中一次点击可能需要长达一分钟才能加载。
让我眼花缭乱的是
- 它似乎与页面内容无关。反复加载同一页面的概率为 95%,而一次点击有时需要多花 1000% 到 2000% 的加载时间。反复加载不同的页面也会产生相同的结果。
- 基于 Web 的界面从办公室外访问时不会减慢速度. 也就是说,只有在我们本地网络后面使用时,速度才会变慢。
- 其他网页似乎没有变慢,但停止滞后的页面并重新加载就可以了,这让我觉得这种情况会持续几秒钟,阻止在此阈值内进行的所有点击,但不会阻止两秒后进行的点击
- 该网站使用 jquery 和 jquery-ui,以及一些其他库(jquery cookie master、xdate)。如果从我们的服务器或直接从 jquery 和 ajax.googleapis 加载它们,则会出现速度缓慢的情况
面对这一切,我咨询了网络专业人士,最终我们更换了网络设备,现在使用的是思科 asa-5505 防火墙和托管思科催化剂交换机。
- 之前,我们注意到对 google.com 的 ping 有时会超时或需要长达 13000 毫秒才能加载,而通常我们的 ping 时间为 20-30 毫秒
- 我们还通过咨询我们的 ISP 注意到,我们最多800GB每月上传量!我们确实管理照片和大文件,但 800GB 远远达不到正常使用量。有一段时间,我们认为高网络上传流量可能会阻止页面加载资源。我们可以通过我们的 ISP 历史记录看到,缓慢和大量上传似乎大致同时发生。我无法毫无疑问地说出哪个先发生,它们似乎都发生在同一周。
- 显然,我们遇到了大量的数据包丢失错误
- 我无法确定速度缓慢会影响哪些协议。我没有直接遇到下载失败的情况,也没有收到任何用户抱怨下载失败的投诉,但通过 netbeans 上传文件到 ftp 会受到影响。但是,用户习惯将
transmit
文件传输到我们的客户机并传回,我还没有收到有关文件上传不正确或客户机收到损坏文件的投诉。
遗憾的是,我没有收到任何投诉,但这并不代表没有发生过这样的事情,因为当时与用户的沟通有些紧张。我想说,网络速度慢是导致这种情况的原因 [双关语]。
当我们聘请的专家来安装网络上的新设备时,他们进行了一些配置和监控,现在,我们的 ping 已恢复正常,数据包丢失错误发生的频率大大降低,以至于我们认为这些只是互联网上正常的数据包丢失。而且从我们可以看到的情况来看(才几天),巨大的上传已经停止了。
但 5% 的点击仍然需要大量时间来加载。
我尝试使用 firebug 的 net 选项卡进行调试,以查看网站加载缓慢的部分。服务器本身的响应时间在 200-800 毫秒之间,具体取决于页面的复杂程度,这似乎没问题。大多数图像加载正常,库也一样,但当出现缓慢时,这些图像或库中的一个或多个将永远等待加载。它并不总是相同的库或图像
我的想法是,在加载图像和库以显示页面时,网络负载会阻止资源正确到达目的地。
我如何才能确定是什么阻止了特定资源(无论是图像还是 js 库)的加载?
我缺乏使用 wireshark 或其他高级(从我的角度来看)网络工具的技术技能,但如果有必要,我会学习的。话虽如此,此时监控似乎无关紧要,我不想看到它变慢,我知道它很慢。我想知道什么阻止资源到达本地网络中的目标计算机。
答案1
因此,如果不实际进入您的网络并与您进行详细诊断,这里的答案可能更像是“为您指明方向”并看看它是否有效。
话虽如此,在处理这种事情时,我采取了某种奥卡姆剃刀方法。
您曾表示:
“当从办公室外部访问时,基于 Web 的界面不会出现速度减慢的情况。也就是说,只有在本地网络后面使用时,速度才会减慢。”
如果确实准确的话,这就是需要关注的关键部分。
那么问题应该出在“本地网络”的某个地方。它不是外部托管的服务器/应用程序,否则同样的问题可能会从另一个位置复制。
那么在哪里呢?您已经更换了一些网络设备,但似乎毫无效果。
这是我建议您做的事情,听起来可能很简单,但要从网络最远的外部点向后进行:
- 拿一台从未接入本地 LAN、不属于域等的笔记本电脑,将其直接连接到本地网络的 ISP。直接连接是关键。将笔记本电脑直接连接到 ISP 的网络,无需防火墙或类似设备,然后查看您获得的响应/性能,并将其与已知运行良好的外部设置进行比较。
- 如果您在步骤 1 中没有看到问题,请将笔记本电脑向后移一层,直接连接到 ASA 防火墙,然后通过防火墙再次进行测试。
- 如果 #2 没有问题,则返回另一层,这次是在托管交换机后面。
- 如果 #3 没有问题,那么您就知道这不是网络问题。
如此反复(尝试外部存在“问题”的客户端等),直到您至少可以客观地说出问题是什么/在哪里发生,即使您不知道为什么或具体是什么在特定“层”上导致了问题。然后,您可以开始更深入地研究该特定“层”。
答案2
你可能需要使用 nmap(或者 wireshark 等)来检查本地网络,它可以帮助你找到感染病毒并发送数千个垃圾 arp 请求的 Windows 计算机,或者使用 bittorrent 客户端的用户,或者任何可能使你的本地网络或互联网上传饱和的用户。
另一种选择是大多数 ISP 都远非完美……也许有时 ISP 会有一些数据包丢失或上传稳定性问题。安装像 smokeping 这样的监控工具并监控互联网上的目标可以帮助您看到这一点(数据包丢失、上传缓慢、ping 缓慢),还可以让您看到何时发生这种情况(每次 john doe 在办公室并将他的计算机插入网络时?)。