个人用户的网站速度变慢,但他们可以切换浏览器?
Posted
技术标签:
【中文标题】个人用户的网站速度变慢,但他们可以切换浏览器?【英文标题】:Site slows for individual users, but they can switch browsers? 【发布时间】:2010-12-14 17:39:37 【问题描述】:我试过搜索这个,但很难用语言表达。
基本上,我们的网站对于大多数用户来说都可以正常运行而不会出现任何问题。但有时,我们这些整天大量使用该网站的人会突然完全陷入困境。一切都在原地旋转。该站点本身仍然很好 - 其他人仍然可以访问它,但是单个用户被卡住了。事实上,即使您明确清除 cookie,完全重启浏览器通常也不能解决问题。
不过,您通常可以通过切换到其他浏览器来正常打开该网站。如果您在 Firefox 中陷入困境,通常可以将其打开并继续在 IE 中正常工作。这可以通过两种方式发生(您可以让 IE 陷入困境,然后切换到 firefox 工作)。
这有任何意义吗?好像会话出现了问题,但我不知道是什么原因造成的,应该通过重新启动浏览器并清除 cookie 等来重置会话。
有什么想法吗?
[编辑澄清,对不起,应该包括这个开始] 服务器是 RedHat 上非常基本的 LAMP 堆栈,带有 Apache 2.2.3、php 5.2.11、mysql 5.0.45(我们考虑过升级 MySQL,但我认为这不是这里的问题)。这是 Rackspace 的标准配置,所以除了 Zend Optimizer 之外,我认为我们没有做任何奇特的事情。
我们使用了很多 javascript/jquery,但它们都是非常标准的东西,我不希望内存泄漏不会影响其他浏览器,尽管我可能错了。
此外,我们服务器的 CPU 和内存使用率从未超过 25%,即使出现峰值也是如此,而且峰值似乎与这种现象无关。
【问题讨论】:
我在两个客户的网站上遇到过类似的现象,我试图解决几个月都没有成功。非常有兴趣看看这里是否会出现有趣的东西。 +1 如果你告诉人们你的服务器是什么,它运行什么服务等可能会有所帮助。 您的网站是否使用客户端代码?可能是内存泄漏。 当一切都变慢时,查看页面中的 VIEWSTATE 变量。我遇到了类似的问题,发现发送到浏览器的 VIEWSTATE 超过 1MB,所以每个 POST 都会将其发送到服务器。 您是否尝试过在 Firefox 停止时加载 Firebug 的脚本或网络面板?这应该让您了解它是脚本执行时间还是浏览器等待来自网络的某些内容。此外,您是否有任何记录服务器端来处理异常长期的请求? 【参考方案1】:听起来很像您遇到了某种会话锁定问题。您说即使删除 cookie 也无济于事,这使得会话锁定看起来不太合理,但我没有关于您的实施的任何细节,所以它仍然是可能的。
我有两个问题需要回答才能深入了解这个问题。
您是否在流式传输内容时打开了会话并且尝试根据不同的请求读取或写入会话?
您是否实施了自己的会话?
如果您对问题 1 的回答是肯定的,或者可能是问题 1,那么这可能就是您问题的根源。
如果您对问题二的回答是肯定的,如果您将会话管理切换到标准 php,问题是否仍然存在?您的会话处理中可能存在错误。
【讨论】:
是的,很可能是在同一会话中打开多个选项卡时,我们正在写入会话,同时读取会话。我会告诉我的伙计们只在一段时间内使用一个标签,看看这是否能把我们带到某个地方。有没有办法解决?我正在使用标准的 PHP 会话。 不只是多个选项卡会导致多个打开请求,只是同时加载任意两个或更多资源,选项卡本身不太可能这样做,除非你也在做一些AJAX。 有几个页面使用了很多ajax。团队中的人员同时在多个选项卡中打开一个或多个这些页面的情况并不少见。现在会话锁定绝对是我所依赖的。 我刚刚设法将其锁定。从 ajax 加载一个页面时,我打开了另一个调用会话的页面。如前所述,这杀死了 Firefox 中的站点。我能够在 IE 中得到它就好了。我手动从服务器中删除了会话,并且所有内容都加载了。我不太相信这是一个会话锁定问题。是否有任何替代方案(除了基于数据库的会话)可以解决这个问题? 恐怕你只需要有选择地打开和关闭会话,我个人有我自己的基于数据库的会话,但只是 PHP 的 $_SESSION 的后端,如果你做错了。【参考方案2】:生日,
听起来您在服务器端按会话保存某种信息。
您是否在服务器上保留会话 ID 或用户 ID?也许随着每个后续传入请求向一些持久化数据添加越来越多的信息?
也许还涉及到传入的用户代理字符串,这就是为什么更改浏览器类型有效,而在相同类型的浏览器中简单地重新启动会话不起作用?
您是否看到是否跨越时间边界停止和重新启动会话,例如使用同一浏览器时的小时或午夜也会重置问题吗?也许尝试欺骗 UA 字符串,看看这是否也解决了问题。
顺便说一句,您在服务器中运行了哪些 Apache 模块? 2.2.3也是比较老的版本了,有没有考虑升级?
【讨论】:
我们正在服务器上存储会话,是的。如果用户关闭浏览器并返回,我们不会通过 cookie 或类似的方式重新启动旧会话,因此如果他们离开浏览器,它应该启动新会话。我一定会查看会话,看看手动删除会话文件是否可以解决问题。升级没有什么问题,也许这将是我们列表中的下一个。 @epalla,干杯。我真的想知道你坚持的东西是否会随着时间的推移变得如此之大。让我知道发生什么事。顺便说一句,这是我为 major 网站所做的事情。 (-: 祝你好运。 我还没有机会对此进行全面测试,但是我看到的所有当前会话文件的大小都在 1k 以下(除了我自己的两个 phpMyAdmin 会话,它们已经膨胀到了惊人的 13 和分别为 15k)。我们的垃圾收集并没有什么疯狂的快,所以我希望如果这是导致我们今天早上超时的原因,我仍然会有一些异常大的会话。我还是不明白为什么重启浏览器不能解决这个问题? @epalla,如果您将会话信息保存为 cookie,那么重新启动将无法解决该问题。我开始怀疑这是否是您现在正在经历的某种客户端泄漏,正如@Nazarly 所暗示的那样。【参考方案3】:在我看来,这是您的 javascript 创建的内存泄漏。检查您的进程列表,看看浏览器在开始和半小时浏览和重新加载您的网站后消耗了多少内存。如果内存消耗明显多于预期,那么您必须检查您的 javascript 代码中是否存在任何未返回的方法、未中断的循环等。 通常会有所帮助。
【讨论】:
完全重启浏览器不会清除这个吗?诚然,我不了解内存泄漏的机制。 是的,在您重新启动浏览器后,内存会被清除。例如,当我启动 Firefox 时,它消耗了我大约 70Mb 的 RAM,在一个网站下工作几个小时后,不断的页面刷新和捕获事件,浏览器消耗超过 300Mb 的 RAM,这是应用程序中内存泄漏的最常见迹象。当您使用来自第三方的缩小库时,很难修复它。 对,但这意味着重新启动浏览器可以解决问题,但事实并非如此。【参考方案4】:有趣的是,没有人建议将广告作为原因(Nazariy 的回答可能会被采纳)。
基本上检查您网站上显示的广告,其中有很多废话,它们总是基于用户识别,这可以解释为什么重新启动浏览器没有帮助。
【讨论】:
我们确实使用了分析,但我们在网站上没有其他广告。【参考方案5】:事实上,这也经常发生在我身上。完全无状态的站点,大量的 AJAX 请求,一段时间后站点变得无响应。在调试过程中尤其烦人。以下是您必须注意的一些事项:
加载的 JS 文件数(包括使用脚本请求获得的文件)(如果使用该方法,您可能应该删除创建的脚本标签) CSS 文件的数量(例如,在 IE 上,我认为有 31 个硬性限制) 有时浏览器会锁定 DNS 解析请求 某些浏览器对域的请求数量有限制(IE 有 2 个),因此如果有请求未完成,该域的所有其他浏览器将不得不等待当然,所有这些都不能解释为什么在您重新启动同一个浏览器后它一直挂起 - 尽管您没有提到清除缓存,所以可能有一个失败的请求位于您的浏览器缓存或某些中间缓存中或代理,因此您可以尝试查看如果您在浏览器中完全关闭缓存是否会发生这种情况。 (例如,在 Firefox 上,这可以使用 Web Developer 工具栏轻松完成。)
您还应该查看挂起的请求,使用 Fiddler 和 Firebug 来查看。
【讨论】:
【参考方案6】:由 javascript 引起的内存泄漏会影响浏览器,因为它都是客户端。 jquery compress or min 你不能确定问题出在哪里,很可能是原因问题,或者是使用它的脚本。
【讨论】:
以上是关于个人用户的网站速度变慢,但他们可以切换浏览器?的主要内容,如果未能解决你的问题,请参考以下文章