Java:Matcher.find使用高CPU利用率

kan*_*rbk 5 java regex performance

我正在使用mod安全规则https://github.com/SpiderLabs/owasp-modsecurity-crs来清理用户输入数据.我正面临cpu射击和延迟匹配用户输入与mod安全规则正则表达式.总的来说,它包含500多个正则表达式来检查不同类型的攻击(xss,badrobots,generic和sql).对于每个请求,我会查看所有参数并检查所有这500个正则表达式.我Matcher.find用来检查参数.在这种情况下,一些参数属于无限循环,我使用以下技术解决了这个问题.

取消长期运行的正则表达式匹配?.

消除用户请求大约需要大约500毫秒,并且cpu%会上升.我使用visualvm.java.net和我的测试套件运行程序进行了分析.

Cpu配置文件输出

在此输入图像描述

请帮我减少cpu使用率和平均负载?

pab*_*a98 2

避免使用以下表达式:

  • 多线
  • 不区分大小写
  • ETC。

也许您可以考虑对正则表达式进行分组,并根据用户输入应用给定的正则表达式组。