项目上线后,用户越来越多,有一天出现一个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项目慢的问题&解决的更多相关文章

  1. Maven 用Eclipse创建web项目后报错的解决方式

    1.maven中创建web项目后jsp可能会报错,因为其没有相关的依赖(包),和自带的动态网页项目创建不一样.所以在配置文件中要添加相关的依赖,比如servlet的 2.项目右键-maven-upda ...

  2. 读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题

    1.需求:有时候我们产品经理给我们的需求是会不断变化的,例如数量是1000现在变成500,我们不可以去改代码吧,这样很麻烦,所以就可以改配置文件properties(这个数据库链接一样),当然也有js ...

  3. Eclipse导入MyEclipse创建的web项目报错的解决方法

    将myeclipse中开发的动态web项目直接引入到eclipse中继续开发,Eclipse中会报项目有错,如下图

  4. vs2015 web项目加载失败解决办法

    1.问题 ---------------------------Microsoft Visual Studio---------------------------Web 应用程序项目 XXWeb 已 ...

  5. 建立一个Web项目及一些错误解决办法

    培训之前,先自学一波,写一个从Hello World,然后记录一下每天学习Java Web的过程:东西很多,有用的会写大量解释,希望能最终学完 然后搞定这门语言吧. 1.配置tomacat:点击win ...

  6. 目录已存在导致Jenkins项目构建失败的解决方法

    Jenkins中的项目在下载源代码时,如果Working Directory中存在未加入版本控制的文件或者目录已经存在于SVN库中,会导致更新失败,整个构建终止,解决方法是将SVN的检出策略由&quo ...

  7. java web项目406错误的解决

    返回的消息头浏览器不能解释 这里我们使用了@ResponseBody,返回数据后缀是,.json,但是我们的映射器后缀又是.html.最后浏览器收到数据不知该以哪种类型数据来进行解析,所以就会报406 ...

  8. 创建Maven Web项目时很慢解决办法

    点击加号,Name输入archetypeCatalog,Value输入internal archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,loc ...

  9. IntelliJ IDEA创建Maven web项目速度慢的解决方法

    在Properties中添加Name:archetypeCatalog和Value:internal,如下图那样

随机推荐

  1. Magicodes.WeiChat——多租户的设计与实现

    概要 多租户(Multi Tenancy/Tenant)是一种软件架构,其定义是:在一台服务器上运行单个应用实例,它为多个租户提供服务. 本框架使用的是共享数据库.共享 Schema.共享数据表的数据 ...

  2. Android 5.x特性概览四

    上节,我们说了palatte及其特性,这里我们介绍Android 5.x的另一个特性视图与阴影. 在第一节,我们就提到了Material Design 一大特性就是就是扁平化,倘若说 iOS 的扁平化 ...

  3. 10 个超酷的加载中的 Gif 动画

    #1: Calming cat loading gif #2: Stylish loading gif #3: Shape changing loading gif #4: Loading gif f ...

  4. 【NetDIY智能主控】开发计划

    经过一个轮回,硬件开发.硬件创业又被推到了历史的前台. 面向低端.初级的硬件爱好者,以Arduino和81单片开发板为核心的开源硬件越来越深入人心,参与的人群越来越多,相关硬件和周边模块也越来越便宜. ...

  5. 尝试在mac上用dotnet cli运行asp.net core示例程序

    自从知道微软用dotnet cli取代dnx之后,一直在等dotnet cli支持asp.net core... 昨天看到这篇新闻(ASP.NET Core 1.0 Hello World)后,才知道 ...

  6. MyEclipse 8.5 优化实例

    在用[MyEclipse] 写代码很容易卡死机,尤其是在对JSP文件的<%%>之间写代码的时候,只要一弹出智能提示就立刻卡死,程序失去响应,我以为是MyEclipse版本的问题,结果换了6 ...

  7. HBase中MVCC的实现机制及应用情况

    MVCC(Multi-Version Concurrent Control),即多版本并发控制协议,广泛使用于数据库系统.本文将介绍HBase中对于MVCC的实现及应用情况. MVCC基本原理 在介绍 ...

  8. Mathematica修改默认字体

    1. 打开Option Inspector 2. 第一个下拉框选择Global Preference, 搜索stylehints 3. 修改字体为想要换的字体FamilyName, 比如换成苹果黑体 ...

  9. atitit.表格的绑定client side 最佳实践

    atitit.表格的绑定client side 最佳实践 1. 框架选型 1 2. #---原理和流程 1 1. 方法1 1 2. Dwr 例子 1 3. 方法2 2 4. Jq例如 2 1. 框架选 ...

  10. Spark Scala 读取GBK文件的方法

    1. 在生产环境下,很多文件是GBK编码格式的,而SPARK 常用的textFile方法默认是写死了读UTF-8格式的文件,其他格式文件会显示乱码 用如下代码实现读取GBK文件的方法 import o ...