问题概述:

公司做的是BS应用。

之前我们的后台服务器程序是带状态的,用ehcache存储登录状态;这两天被我改成了redis存储,应用本身不再存储登录状态。

然后自测,我在测试某个很耗时间的网页操作的时候,发现第一次请求的时候还比较快(这个请求会开200个iframe出来,每个iframe内部还有2个ajax请求)(期间浏览器会向服务器发送了大概600个请求),耗时1分钟内;

然后第二次请求的时候,发现很多请求一直处于pending状态(chrome的开发者工具可以看),等待很久也出不来页面,就是一直转圈加载,很有耐心的我等了10多分钟才出来。

先是用chrome的开发者工具查看请求,以下面的一个ajax请求为例,

从开发者工具看到右边的主要耗时在Waitting(TTFB),那看来应该是我服务器有问题咯?

排查开始:

1、后台逻辑

这个请求的主要逻辑是:先过拦截器,拦截器根据cookie中带的全局token去redis取登录信息,判断是否登录来进行拦截;如果登录了的话,到controller层后,主要是查数据库,为了排除这部分影响,业务代码被我注释了,直接返回。

2、排除无关因素

2.1、先注释掉业务逻辑代码

2.2、再记录下拦截器中从redis取数据花费时间:

3、跑了几把后,日志记录大概如下:

因为是业务逻辑马上就返回,几乎不耗时;

拦截器也耗时很少,大概是0,1,2这几个值(局域网redis还挺快的)

4、开始问题测试

结果呢,发现现象还是一样,第一次还比较快,后面就越来越慢。开始怀疑是不是tomcat的问题,

于是尝试改成了nio、线程数也加大了

(上图默认的http11,没换成nio,要换的话,改成org.apache.coyote.http11.Http11NioProtocol)

参考:http://www.jianshu.com/p/8445645b3aff

5、加大tomcat线程池后的结果

还是差不太多,就是比之前是快了一点的感觉。

6、后边跟同事一起分析的时候,同事说要不你把tab页关了再试试,受到了启发。

第一次请求的时候,浏览器的该网站进程(因为chrome浏览器是每个tab页一个进程的)内存占用为600M;

第二次请求的时候,内存会飙到1200M左右;

第三次请求,貌似我那几百个请求几乎很多都在pengding状态。

下面是测试结果:

6.1、首次打开网站时,内存占用为70M

6.2、跑第一次耗时操作

第一次任务跑完,内存上到了1200M,耗时50s,共600个请求左右。

6.3、跑第二次耗时操作

。。。。

。。。。

。。。。

等得时间太长了,所以无聊中看了下任务管理器(上面说了,因为chrome的tab页是进程,所以可以看到)

内存已经快要到1800M了。

开发者工具如下:

可以发现有大量的pending请求,然后时间也已经过去了好几分钟(快6分钟了,还没有完结的迹象)

此时的服务器后台如何呢?

拦截器和业务逻辑方法依然很快。

。。。。

。。。。

。。。。

等啊等

终于,在700s,也就是11分钟左右,终于结束了。坑啊

6.4、对页面刷新后,再跑一次试试

F5刷新后,看看内存占用:

200M。还可以

那么我们再跑一次看看效果

可以看到,新的一次请求,在一分钟内结束了。

总结:事到如今,问题已经很明显,是浏览器tab页(进程)占用内存过大后,发送的请求中pending状态的请求的比例会显著增加。具体原因未明,望解惑。

解决的办法是F5刷新或者关掉tab页重新打开。

chrome浏览器tab页内存占用变大,网站变慢为哪般?的更多相关文章

  1. Egret在Chrome浏览器中的内存占用(内存泄露)

    参考: 怎样查看Chrome的内存占用情况 JS内存泄漏排查方法(Chrome Profiles) chrome内存泄露(一).内存泄漏分析工具 chrome内存泄露(二).内存泄漏实例 目录: 一 ...

  2. Chrome浏览器切页快捷键

    Chrome浏览器切换标签页快捷键 1.Ctrl + Tab 向左切换标签页 2.Ctrl + shift + Tab 向右切换 3.Ctrl + 1 切换到第一个页面 4.Ctrl + 9 切换到最 ...

  3. 关于如何解决谷歌Chrome浏览器空白页的问题

    谷歌Chrome浏览器突然不打开任何网页,无论是任何站点(如http://www.baidu.com), 还是Chrome浏览器的设置页面(chrome://settings/), 扩展页面 ( ch ...

  4. 如何解决谷歌Chrome浏览器空白页的问题

    如何解决谷歌Chrome浏览器空白页的问题   谷歌Chrome浏览器突然不打开任何网页,无论是任何站点(如http://www.baidu.com), 还是Chrome浏览器的设置页面(chrome ...

  5. 解决iis内存占用过大的问题--ZT

    解决iis内存占用过大的问题 在IIS6下,经常出现w3wp的内存占用不能及时释放,从而导致服务器响应速度很慢. 今天研究了一下,可以做以下配置: 1.在IIS中对每个网站进行单独的应用程序池配置.即 ...

  6. Puppeteer笔记(七):Puppeteer切换浏览器TAB页

    一.Puppeteer切换浏览器TAB页 1.browser.pages() 二.上手实例Demo 功能测试:打开www.ly.com首页,定位搜索"苏州",获取新打开页面上的搜索 ...

  7. 关于win7上内存占用较大的说明

    1      Win7系统较XP系统内存占用高: 由于xp系统属于轻量化的系统,而win7系统是一个重量型的系统,在两者的内存管理机制上有很大的区别,根据业界和微软对外的发布公告中可以看到,win7系 ...

  8. 解决.net的堆碎片化带来的内存占用过大的问题

    场景 使用WCF开发的服务端在多个客户端登录后,其服务器的内存占用不断增加. 分析 使用Windbg分析得到内存碎片化严重,其中包含了非常大的空闲空间,最大的一块竟然有150M,真正使用的空间其实很小 ...

  9. 跨浏览器tab页的通信解决方案尝试

    目标 当前页面需要与当前浏览器已打开的的某个tab页通信,完成某些交互.其中,与当前页面待通信的tab页可以是与当前页面同域(相同的协议.域名和端口),也可以是跨域的. 要实现这个特殊的功能,单单使用 ...

随机推荐

  1. java springmvc +spring+ mybaits 模块化开发框架 HTML5+css3.0+bootstrap响应式开发界面

    需要源码,请加QQ:858-048-581 系统模块 1.   权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限       角色(基础权限): 分角色组和角色,独立分配菜单权限和增 ...

  2. 从项目经理的角度看.net的MVC中Razor语法真的很垃圾.

    我们知道,Razor语法中我们可以直接使用@if(){}等代码段,这使得.net程序员在写模版时更容易了. 对比如下: 语法名称 Razor 语法 Web Forms 等效语法 代码块(服务端) @{ ...

  3. .net程序员必知必会

    1.C#,.Net和ASP.Net的区别: C#(Csharp):  .net平台下的一种语言:注:(其他语言也可以开发.Net程序)                   .net      :    ...

  4. C#基础 运算符

    运算符分为5类-- 1.算数运算符[加加(++)   减减(--)  加(+)  减(-)  乘(*)  除(/)  取余(%)] (1)前++和后++的区别 using System; using ...

  5. 依赖ConstraintLayout报错,Could not find *****,Failed to resolve:*****

    ConstraintLayout 约束布局,AndroidStudio2.2中新增功能之一,可以先去看看这篇文章 Android新特性介绍,ConstraintLayout完全解析,2.3版本的And ...

  6. ES3:ElasticSearch 索引

    ElasticSearch是文档型数据库,索引(Index)定义了文档的逻辑存储和字段类型,每个索引可以包含多个文档类型,文档类型是文档的集合,文档以索引定义的逻辑存储模型,比如,指定分片和副本的数量 ...

  7. SQL-ROW_NUMBER() OVER函数的基本用法(源码案例)

    SELECT SUM(t.AdjustedBalance) AS Allqmye FROM ( SELECT * FROM ( SELECT ROW_NUMBER() OVER ( PARTITION ...

  8. RobotFramework中解析中文报错UnicodeDecodeError

    在RobotFramework中解析一段包含中文的字符串时遇到下面的报错: FAIL : UnicodeDecodeError: 'ascii' codec can't decode byte 0xe ...

  9. Android -- 自定义StepView实现个人信息验证进度条

    1,项目中要用到个人信息验证的在网上找了一下,好像有封装好了的StepView,首先感谢一下作者,这是作者的地址,效果图如下: 2,正准备撸起袖子就是一顿复制粘贴的时候,发现效果图成这个样子了(其实这 ...

  10. 开源免费的.NET图像即时处理的组件ImageProcessor

    承接以前的组件系列,这个组件系列旨在介绍.NET相关的组件,让大家可以在项目中有一个更好的选择,社区对于第三方插件的介绍还是比较少的,很多博文的内容主要还是介绍一些简单的操作(很多人都说博客园现在是“ ...