zoukankan      html  css  js  c++  java
  • 实战-java服务cpu打满

    实战记录,参考了原来自己的整理博客:  https://www.cnblogs.com/thinkqin/p/11906010.html


    线上服务cpu打满报警,晚上8:00突然开始cpu打满

    分析思路:

    1.首先调用服务几个接口,接口有响应,且没有特别慢(100ms以内),正常业务使用系统也未受影响。判断紧急程度没有那么高。

    2.怀疑是某个定时任务开启,突然的调动量增大导致,查看日志,接口调用量没有突然增加。

    3.申请到服务器权限,查看

    (1)top,确实是java进程占cpu   pid = XXX

    (2)top   -Hp   XXX 查看有 5个线程异常,每个占20% 左右cpu  

    (3)jstack  XXX > XXXstack;

    (4)查看文件内容中线程为RUNABLE 且线程id 与 步骤(2)里线程对应上的线程id(16进制注意转换)。查看代码堆栈,发现都是 

    j又死循环,见附录。

    java的 pattern 解析问题,查看资料得知JDK pattern解析有偶发的死循环错误。对于这个问题,后续有机会再单独研究。

     (5)重启服务,cpu降下来。后续去掉复杂的pattern 校验逻辑。

    附录

    java栈

    "http-nio-6210-exec-609" #140030 daemon prio=5 os_prio=0 tid=0x00007fc3716ee000 nid=0x244f runnable [0x00007fc30209e000]
    java.lang.Thread.State: RUNNABLE
    at java.util.regex.Pattern$Curly.match0(Pattern.java:4252)
    at java.util.regex.Pattern$Curly.match(Pattern.java:4236)

    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4660)
    at java.util.regex.Pattern$Loop.match(Pattern.java:4787)
    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4719)
    at java.util.regex.Pattern$Ques.match(Pattern.java:4184)
    at java.util.regex.Pattern$Curly.match0(Pattern.java:4274)
    at java.util.regex.Pattern$Curly.match(Pattern.java:4236)
    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4660)
    at java.util.regex.Pattern$Loop.match(Pattern.java:4787)
    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4719)
    at java.util.regex.Pattern$Ques.match(Pattern.java:4184)
    at java.util.regex.Pattern$Curly.match0(Pattern.java:4274)
    at java.util.regex.Pattern$Curly.match(Pattern.java:4236)
    ................................

    at java.util.regex.Pattern$Prolog.match(Pattern.java:4743)
    at java.util.regex.Pattern$Begin.match(Pattern.java:3527)
    at java.util.regex.Matcher.match(Matcher.java:1270)
    at java.util.regex.Matcher.matches(Matcher.java:604)
    at java.util.regex.Pattern.matches(Pattern.java:1135)

    已经可以看到循环的代码了

    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4719)
    at java.util.regex.Pattern$Ques.match(Pattern.java:4184)
    at java.util.regex.Pattern$Curly.match0(Pattern.java:4274)
    at java.util.regex.Pattern$Curly.match(Pattern.java:4236)
    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4660)
    at java.util.regex.Pattern$Loop.match(Pattern.java:4787)

    正则表达式信息

    Pattern.matches(REGEX_EMAIL, email)
    public static final String REGEX_EMAIL = "^([a-z0-9A-Z]+[-|.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)"
    + "+[a-zA-Z]{2,}$";

    解析的字符串是 正常字符串格式,再次本机跑了几万次也没有出现死循环。

  • 相关阅读:
    Python 创建包含列表的元组
    Python 创建特殊元组tuple
    Bean named 'XXX' is expected to be of type [XXX] but was actually of type [com.sun.proxy.$Proxy7
    小米手机安装Google框架
    前端框架
    Microsoft Project项目管理工具
    Spring AOP无法拦截Controller的原因
    sql分页优化
    npm和Node.js简介
    启动OpenOffice服务
  • 原文地址:https://www.cnblogs.com/thinkqin/p/14482518.html
Copyright © 2011-2022 走看看