1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 生产环境CPU占用飙高问题解决

生产环境CPU占用飙高问题解决

时间:2024-07-03 16:09:58

相关推荐

生产环境CPU占用飙高问题解决

1 问题来源与背景

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

2 运维报警

3 问题定位与解决

(1)第一步,用jps查看javapid

(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指令报告系统进程状态。/ps

(2)printf命令格式化并输出结果到标准输出。 /printf

5 拓展参考附录

(1)cpu占用过高

/u013066244/article/details/53503530

(2)Linux系统监控常用命令

/xtjc/1203/31828.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。