暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

生产问题分享_Java正则表达式引发的CPU占比到达100%

嗨零一 2021-11-24
1223

前几天系统的CPU突然占比到达100%,所有的任务被堆积,严重影响业务,通过排查定位到问题代码:正则表达式引发的无限循环问题,导致CPU占满,线程一直被占用,任务堆积。

先来看一下正则表达式,如图所示:

 

这个正则表达式是为了匹配java源文件中的方法起始行,以便后续可以提取到java源文件的所有方法。


在扫描java源文件中,发现这么一行,如下图所示

 


这行在程序中读出来是如下的样子

 


不知道为什么会是这个样子?

因为没有双引号导致了正则表达式的匹配问题

来看下正则表达式:

Pattern pattern = Pattern.compile(patternStrs);

Pattern.matcher(line);

boolean result = matcher.find();

出问题就出在matcher.find()这行代码,当line对象后面未含有双引号时,此行代码会出现无限循环,导致执行这行代码的线程一直执行,无法退出。但是如果换成matcher.matches()就能避免这样的问题,最后我们也是这样改的。


文章转载自嗨零一,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论