기술지원 문의
-Xdebug 옵션을 추가했을 경우
클뷰 / 2007-06-18 14:36
Hot deploy기능을 사용할려구 -Xdebug 옵션을 추가했을 경우, 상용서비스에서 문제가 될수 있을까요?
가령, 퍼포먼스 등등..
[답변]-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);
> }
>
> }
>