我的公司正在开发一个基于networking的数据查看器应用程序,需要相当大量的带宽才能正常运行。 不过最近我们改变了很多东西。 例如,我们更改了内部networking基础设施,以便数据可以托pipe在通过千兆以太网连接的单独机器上。 最重要的是,应用程序本身不断推出新版本,因为我们仍在进行alpha和betatesting。
最近我们做了一些导致性能较差的改变,我们希望在我们开始把事情分开之前,尝试找出问题所在。 这是一个非常小的networking,作为一个ITpipe理员,我的经验有限。 关于从哪里开始,我有一些想法,但是我想先从专家那里获得一些小小的智慧:你如何解决/避免类似的问题? 什么是您使用的最有用的(Windows)工具?
我总是遵循这种方法:尝试一次testing一件事。
可靠的“科学方法”对于故障排除非常有效:
对于一个Web应用程序,这可能意味着
还运行testingcpu,内存,磁盘速度的基本基准testing可以帮助您在进一步testing之前将其中的一件事情排除在外。
我总是看到这样的事情:
新服务器上的备份需要比旧服务器花费更长的时间。
但没有人做过基本的磁盘基准testing,发现旧服务器的主轴数量是新服务器的两倍……或者一个networking基准testing,发现新的服务器千兆以太网只能运行在100M。
所有这一切说,如果这是一个自定义的Web应用程序,您正在使用的框架绝对有一种方法将性能信息转储到一个日志文件..但这是更多的问题stackoverflow。
我已经订阅了“福尔摩斯”的故障排除方法,即二进制search故障排除方法:
根据我的经验,你有时候首先尝试一些显而易见的东西会很幸运,但是一旦你耗尽了真正的快速修复,你就需要快速有条不紊的进行。
此方法与科学方法和一次testing兼容。
上面的答案总和是我说的90%,其他的10%是这样的:
一些用于Windows故障排除的最佳工具来自微软的Sysinternals 。 有关如何使用它们的最佳信息(以及Windows技术信息)可以在Mark Russinovich的博客和networking广播中find 。 他在Windows内部的书也充满了很好的信息。
有了上面的内容,我build议从程序进程pipe理器和进程监视器开始,看看你正在运行的任何Web服务,看看发生了什么事情。 这两个程序都允许您显示大量关于正在运行的进程的信息,可以通过右键单击列标题进行configuration。
引入性能问题的改变是什么? 如果只是代码被更改,那么我会开始我的故障排除。
将问题状态与已知良好状态进行比较,并查找差异。
已知良好状态可以是实际logging的状态。 它也可以基于预期行为的标准,例如networking协议的已知预期行为或诸如适当的平均CPU使用率的经验法则。
例子:
使用Wireshark或其他networking嗅探器工具,您反复看到重复的数据包。 现在你可以深入了解一下为什么你在线路上看到相同的IP数据包。 也许你有一个“本地路由器”的情况下,或者可能是分割IP数据包。
平均CPU使用率为90%。 如果平均值为90%,那么服务器可能会频繁地占用CPU,导致所有内容都被备份。
在John T的推荐下,我一直喜欢用gnuplot来使用dstat 。