안녕하세요 기술팀 권용찬이라고 합니다, -Xdebug 옵션을 켜시면 개발시에 클래스적용이 편한 부분이 있습니다만 말씀하시는대로 어느정도 성능감소가 있습니다. 절대적안 수치를 테스트 해보지는 못했지만 당사 T-WAS BMT하면서 옵션을 켜면 tps(초당 처리능력)이 20~50 tps정도 낮게 보이는것을 본적이 있습니다. 물론 BMT할때는 과도한 부하를 생성하는 단계라서 정확하지는 않지만 300tps정도 나온느데 그정도면 적지 않은 부하라고 생각하실 수 있게습니다. 예전에 옵션과 관련된 성능 부분을 찾다가 구글신이 검색해준 내용이 기억나서 말씀드리면 특정 클래스를 옵션과 함께 실행할 경우의 처리성능입니다. java(using hotspot by default): 9700 ms java -classic: 27000 ms java -Xdebug: 33000 ms java -classic -Xdebug -Xnoagent -Djava.compiler=NONE: 94000ms 보시는 바와 같이 JIT 환경에서 9.7초 걸리는 것이 -Xdebug옵션을 달 경우 33초가 걸리는 것을 알수 있습니다. 단순 루프이기 때문에 웹서비스용 프로그램과 비율이 정확하지 않겠으나 약 3.4배가 더 걸린다고 할 수 있겠내요 권장 드리는 바는 이런 디버깅 옵션들은 운영환경에 적용하시마시길 권장드립니다. 부하가 그다지 많지 않은 시스템의 경우 별 탈이 없겠지만 부하가 클 수록 그런 옵션에 의한 성능 감소가 전체 시스템 성능에 악영향을 미치는 예가 많습니다. 도움이 되셨길 바라면서 이만.... 참 위에 예를 든 내용을 테스트 하는 코드를 아래에 첨부합니다. public class PerfectFinder > { > > private int sumOfDivisors(int n) { > int sum = 0; > for (int i=1; i<n; i++) { > if (n % i == 0) > sum = sum + i; > } > return sum; > } > > public boolean isPerfect(int n) { > return (n == sumOfDivisors(n)); > } > > public void listAmicable(int upperLimit) { > long before = System.currentTimeMillis();> for (int a=2; a<=upperLimit; a++) { > int b = sumOfDivisors(a); > if (a == sumOfDivisors(b)) > System.out.println(a + \" \" + b + \" are amicable\"); > } > long after = System.currentTimeMillis(); > System.out.println(\"This took\" + (after - before) + \" milliseconds\"); > } > > > public void listPerfect(int upperLimit) { > for (int i=2;i<=upperLimit;i++) > if (isPerfect(i)) > System.out.println(i); > } > > > public static void main(String[] args) { > new PerfectFinder().listAmicable(10000); > } > > } >
|