1 问题来源与背景

问题背景,项目对外提供查询航班舱位接口,对航信黑屏报文做正则解析返回。由于起初对正则不熟悉,对黑屏报文格式规律不清楚,导致写了大量的长正则表达式,生产环境并发量上来(200/s),直接导致CPU使用率峰值徘徊在100%,运维报警反馈。

2 运维报警

3 问题定位与解决

(1)第一步  , 用jps 查看java pid

(2)第二步,显示线程列表 ps -mp 42 -o THREAD,tid,time

可以看到CPU占用率很高线程,如上面显示标红的线程。

(3)第三步,选择自己要看的线程id , 即tid。将其转换成16进制格式。当时选择的是tid 为211.

(4)第四步  打印堆栈信息

(5)第五步 从堆栈信息中定位问题代码

定位到问题代码在 AvQueryClientImpl的319行。具体是由于长正则匹配,吃CPU引起,并发量上来扛不住。

根据业务情景,把正则精简到了原来1/20的长度。CPU占用恢复正常,峰值在10%左右。

4 涉及命令附录

(1)JPS命令
    Jps(Java Virtual MachineProcess Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,
简单实用,非常适合在linux/unix平台上简单察看当前java JVM进程的一些简单情况。
    <1>jps
列出pid
    <2>jps -l
列出pid和java主类全称
    <3> jps -v
        列出pid和JVM参数
(2)Jstack命令
    jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于生成java虚拟机当前时刻的线程快照。
    线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,
如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知
道没有响应的线程到底在后台做什么事情,或者等待什么资源。 如果java程序崩溃生成core文件,jstack工具可以用来获得core
文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。
Usage:
jstack [-l] <pid>
jstack -F [-m] [-l] <pid>
Options:
-F  强制dump线程堆栈信息. 用于进程hung住, jstack <pid>命令没有响应的情况
-m  同时打印java和本地(native)线程栈信息,m是mixed mode的简写
-l  打印锁的额外信息
(3)附录linux常用的指令
   (1)ps指令报告系统进程状态。http://man.linuxde.net/ps
   (2)printf命令格式化并输出结果到标准输出。 http://man.linuxde.net/printf

5 拓展参考附录

(1)cpu占用过高
        https://blog.csdn.net/u013066244/article/details/53503530
    (2)Linux系统监控常用命令
        http://www.xitongzhijia.net/xtjc/20141203/31828.html

生产环境CPU占用飙高问题解决相关推荐

  1. JVM|记一次生产环境 CPU 占用飙高问题解决

    目录 1 问题发现与背景 2 运维报警 3 问题定位与解决 (1)第一步,jps 查看 java pid (2)第二步,显示线程列表 ps -mp 42 -o THREAD,tid,time (3)第 ...

  2. Linux生产环境CPU占用过高排查步骤

    先用top命令找出CPU占比最高的 top CPU占用最高的是java进程,它的 进程ID:3362 ps -ef 或者 jps 进一步定位,得知是怎样的程序 [root@192 ~] ps -ef ...

  3. 03-----生产环境 CPU 占用过高,你如何解决?

    1. top指令 top //找出占用 CPU 最高的进程的 pid. 2. 查看耗CPU的线程号 方法1: top -Hp 进程号.然后按下大写P.//在该进程中找到,哪些线程占用的 CPU 最高的 ...

  4. 【开发经验】java服务生产环境CPU使用过高解决思路

    文章目录 思路 1.定位java服务进程 2.定位线程id 3.定位代码块 java服务生产环境CPU突然升高,日志查询无果时,可以通过使用jvm的调试工具定位问题. 思路 定位java服务进程--& ...

  5. java.exe占用cpu高_Java进程cpu占用过高问题解决

    cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,则是100 ...

  6. 生产环境CPU飙高问题解决,记一次完整解决过程

    一.发现问题 前段时间我们新上了一个新的应用,因为流量一直不大,集群QPS大概只有5左右,写接口的rt在30ms左右. 因为最近接入了新的业务,业务方给出的数据是日常QPS可以达到2000,大促峰值Q ...

  7. 生产环境下JAVA进程高CPU占用故障排查

    感谢原作者 http://blog.chinaunix.net/uid-10449864-id-3463151.html 问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常 ...

  8. idea占用cpu过高_生产环境服务器变慢、CPU占用过高,诊断思路和性能评估谈谈?...

    上篇: https://zhuanlan.zhihu.com/p/166162037​zhuanlan.zhihu.com 一.生产环境服务器变慢,诊断思路和性能评估 1.在Linxu准备数据 (1) ...

  9. Top命令找出CPU占用较高的Java线程信息

    Top命令找出CPU占用较高的Java线程信息 由于种种原因导致生产环境的应用CPU占用奇高, 这个时候就需要确定到底是哪些线程占用了较高的CPU, 然后再做针对性的优化, 可以使用jconsole/ ...

最新文章

  1. python源程序执行的方式是什么执行-python调用可执行文件的方法
  2. 略谈新时尚风之网上购物领域
  3. Diagram of Spring 3.0 module dependencies--转载
  4. Keepalived 使用指南
  5. 转:linux设置进程优先级
  6. 自制vue组件通信插件:教你如何用mixin写插件
  7. foreach是同步还是异步JAVA,Java中foreach与正常for循环效率对比
  8. 泛型--泛型方法、委托--介绍篇
  9. MySQL Statement Cancellation Timer] but has failed to stop it.
  10. 效力微软 15 年的前员工解释 Windows 10 为什么问题如此多
  11. CSS3给页面打标签
  12. python设置多级标题_Mac Office Word设置多级标题
  13. Python中字符的匹配
  14. Exception in thread main java.util.UnknownFormatConversionException: Conversion = ';'
  15. iptable命令参数详解
  16. CGB2108day17
  17. 张勇用最严厉的内部信,敲打阿里云,也在提振阿里士气
  18. SAP库存管理报表(含无价厂)
  19. 什么是 里氏代换原则?
  20. element-UI中使用树组件el-tree实现左侧勾选右侧列表展示并且列表删除某一项左侧树菜单取消相应勾选

热门文章

  1. C# winform 一个简单的类的方法的封装与调用
  2. 电脑高手常用技巧应用全接解
  3. 【后台技术】异步编程指北,问题和重点
  4. redhat升级linux内核,redhat内核升级方法
  5. springboot毕设项目电子竞技赛事管理系统f1v55(java+VUE+Mybatis+Maven+Mysql)
  6. 《C++程序设计实践》实验3
  7. 环球好货VIP会员首次建群的方法及话术
  8. android -- 蓝牙 bluetooth解读
  9. 计算机ip地址错误,网络ip地址怎么修复_ip地址错误的修复步骤-win7之家
  10. mysql文档顶层出现无效内容_文档的顶层无效。处理资源问题,人家网站可以,我的不行!...