【问题标题】:why does my site take so long to load?为什么我的网站需要这么长时间才能加载?
【发布时间】:2009-11-30 17:37:36
【问题描述】:

这就是问题所在。

我的网站托管在一个共享主机上,用于 asp.net mvc。我登录并说出并填写我的一张表格并希望提交。提交是使用 jquery ajax 请求完成的。

现在突然间它会挂起并且不会做任何事情 20 秒然后突然间它会完成我保存表单的请求。

现在事情就是这样。我可以执行 10 次相同的请求,其他 9 次可能需要 200-500 毫秒才能完成。那么为什么会有这样的时差呢?

如果我做了一个请求然后再做一些其他请求,这两个请求似乎都会很快,但如果我停下来几分钟后,第一个请求可能需要一段时间才能完成(似乎范围从 5 到 20 秒)。

但实际上它似乎只是在任何时候发生。有时我几乎可以在看不到它的情况下进行整个会话。有时我连续获得多个,必须刷新页面,然后它会再次快速运行。

那是什么原因造成的呢?

  • 可能是我编写的代码导致它运行缓慢的原因吗?
  • 它是我的托管站点吗?
  • 这是我在家的连接吗?

好像我不知道是什么原因造成的,也不知道如何测试它,所以我什至无法开始修复它。

【问题讨论】:

  • 服务器上是否已经有一些稳定的负载,或者只有你?如果只有你,可能是工作进程被回收。

标签: asp.net-mvc hosting performance


【解决方案1】:

您需要使用分析器(如ANTS Profiler)来确定缓慢的原因。性能下降的可能原因有很多,如果没有一些有关应用程序运行情况的数据,就无法判断。

【讨论】:

    【解决方案2】:

    首先要使用网络分析器,如 Fiddler 或 Firebug。您应该能够很容易地判断问题是来自网络延迟还是实际上只是在等待服务器的响应。可能是服务器。

    下一步是在遇到缓慢的请求时能够看到 CPU 和内存发生了什么,如果它正在访问数据库,则需要能够看到那里发生了什么。也许有一个交易被阻止了。

    理想情况下,您应该查看与硬件和 .Net 本身相关的几个内置系统性能计数器,例如请求队列和 GC 统计信息。

    【讨论】:

    • 如何判断firebug是否是网络延迟?我目前使用萤火虫,但不确定在哪里检查网络延迟。不知道能不能看到cpu和内存,因为是共享主机。
    • Firebug 有“网络”标签。您必须切换到它才能启用它。然后它将请求时间的组成部分分解为 DNS 查找、连接、排队、等待响应和接收数据。如果除了等待响应之外的所有组件都很小,那么您就知道是服务器代码在花时间。如果“接收数据”是小文件的最大组成部分,那么您可能会怀疑网络有问题。
    • 好的,很酷,我将不得不等到我再次看到减速并检查。
    【解决方案3】:

    我还注意到,在共享主机上,该应用程序可能会从全局内存中退出,并需要在第一次重新访问该站点时重新编译。这个过程(重新编译)显然与你的代码库的大小有关,但是对于一个中小型站点来说,重新编译 15-20 秒听起来也不是不合理的。

    要解决这个问题,请确保编译所有视图,而不仅仅是核心 DLL 代码。

    【讨论】:

    【解决方案4】:

    我很好奇您是否在一天中的不同时间对此进行了测试,或者您是否刚刚部署并注意到了滞后。可能是服务器上正在运行的备份或导致该行为的其他管理作业。问题在于,在共享主机上,您几乎没有用于确定性能问题原因的选项。如果滞后一直发生,则可能是以下情况之一:

    • 服务器的共享帐户过多且资源不足(您的主机不会承认这一点)
    • 您正在与一个非常繁忙的站点共享硬件(您的主机不会轻易承认这一点,但您自己会发现)
    • 其他帐户正在运行非常耗费资源的应用程序(您的主机会帮助您)

    您可以对您的 IP 进行反向 DNS 查找,看看还有什么正在运行。 您可以在等待响应时 ping 服务器,看看网络延迟是否上升,或者响应是否一致快。最后,您可以请支持人员看一看。

    【讨论】:

    • 嗯,也许你是对的。 2 小时后我回来并做了同样的事情(创建 6 个帐户并执行相同数量的操作),但我只挂断了一次。我该如何做这个反向查找?我正在测试的部分也在认证中。我是否必须取消身份验证才能对其进行 ping 操作,或者它周围是否存在?
    • 有些网站可以做到这一点(只是谷歌反向 DNS)。或者,ping 您的站点以获取 IP 地址,然后使用您的 IP 运行 nslookup -d xx.xx.xx.xx,您将获得具有该 ip 的 dns 记录的所有域的列表。
    【解决方案5】:

    您是否在应用程序中添加了登录功能,以便识别服务器代码中的滞后?

    除了 Fiddler 和 Firebug,我还将实现日志记录堆栈。可能是服务器上的某个特定请求被搁置了。

    记录将缩小它所在位置的可能性。

    【讨论】:

    • 我有 elmah 作为我的日志,但我猜这是不同类型的日志?
    • 不确定,但我会使用 log4net 之类的东西,然后使用严重性设置为 debug 来记录所有内容。然后一旦你解决了它,你可以通过方便的配置文件再次打开和关闭登录。
    猜你喜欢
    • 2012-03-31
    • 2016-08-03
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    相关资源
    最近更新 更多