一次流量稍高导致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,如下图那样
随机推荐
- 安装Tomcat服务器
一.首先,下载Tomcat,你可以直接百度Tomcat官网, 或者,直接在地址栏输入他的官网地址:http://tomcat.apache.org/,然后进入他的主页,在主页左侧可以找到Downloa ...
- 笔记:Hyper-V上Centos 6.5分辨率调整问题解决笔记
最近忙的没有心情写东西,果然博客就这么长草了.今天就稍微写一点点东西吧,反正这问题挺烦的. 背景如下:为准备做redis集群实验,特在笔记本上搭建CentOS6.5的Hyper-V虚拟机. 虚拟机创建 ...
- 用c#开发微信 (21) 微信酒店预订系统
本系统主要是帮助酒店让客户可以通过微信预订房间,增加酒店的入住率. 1 微信里订酒店 1.1关注微信号 用微信扫描下面的二维码(微信号 webuscn),关注此微信号 1.2订房 点击微信号里的 微布 ...
- NodeJS http 模块
#4 NodeJS http 模块 工作目录 server.js var http = require('http'); var fs = require('fs'); var path = requ ...
- Nginx学习笔记(六) 源码分析&启动过程
Nginx的启动过程 主要介绍Nginx的启动过程,可以在/core/nginx.c中找到Nginx的主函数main(),那么就从这里开始分析Nginx的启动过程. 涉及到的基本函数 源码: /* * ...
- [C++] socket -8 [命名管道]
::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制.与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一进行传输. /* 命 ...
- Jenkins pipeline 入门到精通系列文章
Jenkins2 入门到精通系列文章. Jenkins2 下载与启动jenkins2 插件安装jenkins2 hellopipelinejenkins2 pipeline介绍jenkins2 jav ...
- hibernate主键生成策略(转载)
http://www.cnblogs.com/kakafra/archive/2012/09/16/2687569.html 1.assigned 主键由外部程序负责生成,在 save() 之前必须指 ...
- 编码剖析Spring管理bean的原理
project目录 MyClassPathXMLApplicationContext读取xml,以及实例化bean. 因为是一开始实例化配置文件所有bean,所以需要构造器完成这些工作. packag ...
- Atitit selenium3 新特性
Atitit selenium3 新特性 Selenium2.0 支持了webdriver api,,原来自己的api放弃了. Selenium v2.45.0 发布,支持Firefox 3 ...