一次流量稍高导致web项目慢的问题&解决
项目上线后,用户越来越多,有一天出现一个issue:用户访问特别慢。
首先介绍下架构:
haproxy/Nginx
/ \
node1 node2
| |
redis redis(slave)
| |
mongodb mongodb(replecate)
统计
查系统状态是什么情况,首先确定外部总体现象

压力是有些

但应该不至于很慢
- check 网络
看下发末尾的流量,也不是特高。(忽略接近末尾的峰值)

- log
然后追查node 节点log对应时间点(8:00PM)的log
2015-08-04 19:35:50 +08:00: Mozilla/5.0 (Linux; U; Android 4.4.2; zh-CN; SM-G9006V Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/10.5.1.597 U3/0.8.0 Mobile Safari/534.30" "referer:http://wap.10086.cn/index.html" "112.85.32.217 GET /wx/caiyun HTTP/1.1 200" response size : -1 need time 1053ms.
获取个页面不需要数据库都要秒级别。有些js 要几秒!
- 检查htop (内存偏低)
- 检查pm2


CPU 奇怪的高
逐个时间点与GA同时看
$ grep 'GET /wx/caiyun' /var/log/finance/applogs/koala-9031-out.log | grep "20:[0-9][0-9]:" | wc -l
3794
$ grep 'GET /wx/caiyun' /var/log/finance/applogs/koala-9031-out.log.1 | grep "20:[0-9][0-9]:" | wc -l
3045
无特别大的波动。
- 检查异常原因(入侵?): less /var/log/syslogs 无果
- 数据库mms 显示正常。查询不慢
后续分析了错误的log
node1
2015-08-04 21:10:53 +08:00: FATAL ERROR: JS Allocation failed - process out of memory
...
node2
...
2015-08-04 23:00:50 +08:00: FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory
最终发现时内存不足导致。
- 查看htop 排序mem 后发现 mongodb 最多,node 其次
- pm2 部分节点特高mem 占用>2G
综此,估计是mem 占用高,而涌入的流量读取静态文件,在disk io <-> mem 之间由于不够内存,经常swap。导致等待特别长。同时导致处理一个connection request 特别长,涌入的流量消耗了大量cpu 资源去维持。
优化措施后续更新。
一次流量稍高导致web项目慢的问题&解决的更多相关文章
- Maven 用Eclipse创建web项目后报错的解决方式
1.maven中创建web项目后jsp可能会报错,因为其没有相关的依赖(包),和自带的动态网页项目创建不一样.所以在配置文件中要添加相关的依赖,比如servlet的 2.项目右键-maven-upda ...
- 读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题
1.需求:有时候我们产品经理给我们的需求是会不断变化的,例如数量是1000现在变成500,我们不可以去改代码吧,这样很麻烦,所以就可以改配置文件properties(这个数据库链接一样),当然也有js ...
- Eclipse导入MyEclipse创建的web项目报错的解决方法
将myeclipse中开发的动态web项目直接引入到eclipse中继续开发,Eclipse中会报项目有错,如下图
- vs2015 web项目加载失败解决办法
1.问题 ---------------------------Microsoft Visual Studio---------------------------Web 应用程序项目 XXWeb 已 ...
- 建立一个Web项目及一些错误解决办法
培训之前,先自学一波,写一个从Hello World,然后记录一下每天学习Java Web的过程:东西很多,有用的会写大量解释,希望能最终学完 然后搞定这门语言吧. 1.配置tomacat:点击win ...
- 目录已存在导致Jenkins项目构建失败的解决方法
Jenkins中的项目在下载源代码时,如果Working Directory中存在未加入版本控制的文件或者目录已经存在于SVN库中,会导致更新失败,整个构建终止,解决方法是将SVN的检出策略由&quo ...
- java web项目406错误的解决
返回的消息头浏览器不能解释 这里我们使用了@ResponseBody,返回数据后缀是,.json,但是我们的映射器后缀又是.html.最后浏览器收到数据不知该以哪种类型数据来进行解析,所以就会报406 ...
- 创建Maven Web项目时很慢解决办法
点击加号,Name输入archetypeCatalog,Value输入internal archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,loc ...
- IntelliJ IDEA创建Maven web项目速度慢的解决方法
在Properties中添加Name:archetypeCatalog和Value:internal,如下图那样
随机推荐
- [云] 1、云服务器——从ILP\DLP\TLP谈起
1) ABOUT:ILP\DLP\TLP 1-1.ILP 大约在1985年之后的所有处理器都使用流水线来重叠指令的执行过,以提高性能.由于指令可以并行执行,所以指令之间可能实现这种重叠称为指令级并行( ...
- Linux:软件安装
Linux 上的软件安装 四种安装方式 在线安装 从磁盘安装盘deb软件包 从二进制软件包安装 从源代码编译安装 在线安装 在不同的linux发行版上面在线安装方式会有一些差异包括使用的命令及它们的包 ...
- [BTS] Deploy Command
BizTalkDeploymentTools.AddResource.bat @Echo OFF SET ApplicationName=%~1 SET ComponentType=%~2 SET C ...
- 狗日的js的闭包
一.变量的作用域 要懂得闭包,起首必须懂得Javascript特别的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript说话的特别之处,就在于函数内部可以直接读取全局变量 ...
- 日常开发中常见的HTTP协议的状态码
301Moved Permanently请求的网页已永久移动到新位置.服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将申请人转到新位置.您应使用此代码告诉 Googlebot 某个 ...
- Linux下远程桌面Windows
rdesktop-1.7.0.tar.gz [root@localhost fcitx]# tar rdesktop-1.7.0.tar.gz [root@localhost fcitx]#cd rd ...
- 多层嵌套对象无法使用gson反序列化的问题The JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@3bf13cde failed to de
http://www.oschina.net/question/1256646_123691 http://bbs.csdn.net/topics/360005140 http://stackover ...
- Ubuntu “无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive
Ubuntu “无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive 现象一: E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源 ...
- js 生成笛卡尔积
其实生成 笛卡尔积的方法原本很简单,for循环就可以了, function discarts() { //笛卡尔积 var twodDscartes = function (a, b) { var r ...
- nginx 重写 rewrite 基础及实例
nginx rewrite 正则表达式匹配 大小写匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配 -f和!-f用来判断是否 ...