前几天系统的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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




