mod 보안 규칙 https://github.com/SpiderLabs/owasp-modsecurity-crs을 사용하여 사용자 입력 데이터를 살균합니다. 나는 mod 보안 규칙 정규 표현식과 사용자 입력을 일치시키는 데있어 CPU가 고생하고 지연되는 것을 직면하고 있습니다. 전반적으로 그것은 다양한 유형의 공격 (xss, badrobots, generic 및 sql)을 검사하는 500+ 정규 표현식을 포함합니다. 각 요청마다 모든 매개 변수를 살펴보고이 500 개의 정규 표현식을 모두 확인합니다. 나는 Matcher.find
을 사용하여 매개 변수를 확인합니다. 이 경우 일부 매개 변수가 무한 루프에 빠지며 아래 기술을 사용하여이 문제를 해결했습니다.Java : 높은 CPU 사용률을 사용하는 Matcher.find
Cancelling a long running regex match?.
사용자 요청을 sanitize하는 데 약 500ms가 걸리고 cpu %가 (가) 발생합니다. 내 test suite 러너와 함께 visualvm.java.net을 사용하여 분석했습니다.
CPU의 프로필 출력
CPU 사용 % 및로드 평균을 줄이기 위해 제발 도와주세요?
스크린 샷에 따르면'checkPattern'은 212148825 번이고 총 6100774ms가 걸려 통화 당 0.02ms가됩니다. 성능 문제는 보이지 않습니다. 호출 당 500ms의 증거는 없습니다. –
지연이 길어지는 특정 패턴이있는 경우이를 식별하고 질문에 포함시켜야합니다. – Holger
@Holger 촬영 시간은 문제가되지 않습니다. 내 관심사는 부하 및 CPU 사용에 관한 것입니다. 내가 병렬 처리 매개 변수를 처리하고 싶다면, 내 부하 평균이 4 이상이되었다.'jstack -l'을 사용하여 스레드 덤프를 수행하고'thread -H -b -p'을 사용하여 최대 소비 스레드를 찾고 높은 CPU (50 %)를 소비하는 스레드를 16 진수 코드로 변환하면 Matcher에서 실행 가능 상태가됩니다. .발견. –
kannanrbk