Do Not Think!!!

Posted
Filed under 01010101
간만에 삽질 좀 했습니다.

몇일 전 부터 RSS 수집기가 말썽을 일으켰는데, 이 문제를 수정하느라고 한참을 고생했습니다.
계속해서 해당 프로세스가 CPU와 메모리 자원을 한없이 먹는 문제가 발생을 했는데...
thread dump를 확인한 결과 찾은 문제는, 정규표현식으로 이미지 주소를 추출하는 부분이었습니다.

이 문제를 해결하기 위해, 정규표현식 성능을 높이기 위한 방법을  좀 찾아봤습니다. 그 중에서, 몇가지 방법이 나와있는데, 이 중에서
  • STEP 1 : 정규표현식을 적용할 문자열이 길면, 성능이 떨어지기 때문에, 정규표현식을 적용할 문자열을 짧게 합니다.
[code]desc = desc.substring(0, 1000);[/code]
  • STEP 2 : 정규표현식이 적용되지 않는 문자열을 필터링 합니다.
[code]if (0 > desc.indexOf("<img ") && 0 > desc.indexOf("<IMG ")) {
    return;
}[/code]
  • STEP 3 : Pattern.compile 을 한번만 해서 재사용
[code]private static Pattern pattern = Pattern.compile("<img.+?src=\"(.+?)\"", Pattern.CASE_INSENSITIVE);[/code]

이렇게 적용을 했더니,
[code]STEP 0 - 3639 ms
STEP 1 - 2647 ms
STEP 2 - 2148 ms
STEP 3 - 1900 ms[/code]
이렇게 시간이 많이 절약이 됐네요.