我一直有一个奇怪的问题挂在我的负载平衡器服务器运行HAProxy的外部链接Javascript库。 我最近整合了Quantcast监控脚本,工作了大约12个小时,第二天早上我经历了大量的networking连接,如下图所示。 我的负载均衡器后面的所有networking服务器都完全超负荷连接。 我删除了Quantcast的脚本,问题消失了。
我有一些其他分析软件包的问题,但从来没有与谷歌分析或Adsense(这两个外部库)的这个问题。 有没有人遇到过这个问题,或者对如何避免这种情况有什么build议?
Netstat图表
你确定这是由JavaScript引起的?
你在哪里粘贴了Quantcast标签? 尝试在页面的最后,就在上面,所以它不会延迟加载其他资源(img,css等)。
如果浏览器不得不等待javascript,那么它会“挂起”,但这只是因为它必须暂停呈现线程才能等待脚本中的document.write。 它不能保持打开端口80的tcp连接,除非有资源加载问题。
该图看起来更像是一个内存不足的问题,如果你运行mpm-prefork,确保MaxClients没有设置得太高,或者你会碰到交换,导致build立了很多连接,但是没有任何服务。 另外,检查http保持活动设置。
我们通常在本地caching外部的JavaScript。 这样你就不必依赖第三方正确的服务JS。 当然,这可能不是一个选项,取决于js正在做什么或dynamic构build。 但是,例如,您可以在本地托pipeGoogle分析的js。
你可以获得一些额外的好处,例如
使用window.onload事件,只有当页面被完全加载(和连接closures)时,才可以追加外部Javascript(使用简单的document.write或DOM构造)。
尝试使用defer属性推迟脚本的运行:
<script src="script.js" type="text/javascript" defer="defer"></script>
它告诉浏览器在加载页面之前不要考虑脚本。 如果脚本中没有document.write,那么可能会延迟。