기술지원 문의

[답변]-Xdebug 옵션을 추가했을 경우
기술지원팀 / 2007-06-19 00:12

안녕하세요 기술팀  권용찬이라고 합니다,

-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);
>   }
>
> }
>