前几天,线路上一个项目的监测信息突然报出异常。检查机器上相关资源的使用情况后,发现CPU利用率接近100%。通过Java自带的线程Dump工具,我们导出问题的堆栈信息。
我们可以看到所有堆栈都指向一个名为validateUrl的方法,堆栈中有100多条错误消息。通过检查代码,我们知道这个方法的主要功能是检查网址是否合法。
很奇怪一个正则表达式怎么会导致高CPU利用率。为了找出递归问题,我们提取了关键代码并进行简单的单元测试。
public static void main(string[]args){ string bad regex='^([hh][tt]{2}[pp]://|[hh][tt]{2}[pp][ss]://)(([a-za-z0-9-~])。)([A-Za-z0-9-~ /])$ ';string BugURl=' http://www . fapiao.com/dddp-web/pdf/download?请求=6e7JG