'Root'에 해당되는 글 472건

  1. 2012.05.01 JDK 7 Update4 에서 추가된 기능들
  2. 2012.04.06 High Performance Libraries of Java
  3. 2012.04.01 스칼라(Scala) 공부하기 Step 1
  4. 2012.03.29 Linux에서 생성된 자바 core dump 분석하기
  5. 2012.03.15 [Java Perm Gen GC] Perm 영역에서 GC가 발생하는 또 다른 경우
  6. 2012.03.13 [브라우저] 맥에서 구글 크롬 임시파일 지우기
  7. 2012.03.09 [링크] 자바 메모리의 구조
  8. 2012.02.20 [Byteman] BTrace와 비슷(?)한 자바 추적 툴
  9. 2012.02.08 [프로그래머 이야기] 공동 집필 참여
  10. 2012.01.30 [Java GC] 자바의 Perm 영역에서도 GC가 일어날까? 3
  11. 2012.01.26 [Linux] top에서의 VIRT와 RES 2
  12. 2012.01.16 [OO 자바] 나의 네번째 책 집필 진도율 90% 1
  13. 2012.01.16 [subclipse] 맥에서 subclipse 사용하기
  14. 2011.12.09 원격 장비의 MAC address (맥 어드레스) 확인하는 방법
  15. 2011.12.08 [TCP 설정] 리눅스에서 TCP 설정하기
  16. 2011.11.16 [자바 성능 튜닝] 트위터 엔지니어가 쓴 자바 성능 튜닝에 대한 경험
  17. 2011.11.13 ApacheCon 2011 참관 후기 1
  18. 2011.11.04 [vi] .vimrc 파일을 OS 기본 설정값으로 만들기 + vi color sample pack 설치하기
  19. 2011.10.14 [자바 애플릿] 애플릿에서 사용하는 메모리 크기 증가시키기
  20. 2011.10.10 [Conference] 2011 JavaOne 자료 다운로드
  21. 2011.09.16 성능 테스트에 대한 영어 용어에 대한 정리
  22. 2011.09.07 [id_rsa] ssh 서버에 쉽게 로그인하기
  23. 2011.09.01 [Java Spec] JVM Spec과 Java Language Spec 문서 업데이트
  24. 2011.08.30 [JDK7] 2011년 8월 현재 JDK 7은 시기상조인듯 1
  25. 2011.08.29 [집필 방법론] How to write a book
  26. 2011.08.20 [맥] 맥에서 아파치 웹서버 설치하기 2
  27. 2011.08.19 [My Fourth Book] 나의 네번째 책 1
  28. 2011.08.17 [브라우저] 브라우저가 작동하는 방식들...
  29. 2011.07.27 [Linux] vi 에서 커서 이동이 잘 안되고, 이상한 문자가 찍힐때 로케일(locale) 수정방법
  30. 2011.07.26 발표자료 잘 만들기 !!!

Java Performance 뉴스레터에서 JDK 7 Update 4 에서 변경된 사항이 많다고 하길래 한번 살펴봤다. 

- jcmd 명렁어 추가
- Java Flight Recorder 기능 추가
- G1 안정화 버전 출시

직접 확인은 해보지 않았으나, 간단히 살펴보면 JRockit에서 제공되던 기능들이라고 한다.
- jcmd 명령은 실행중인 자바 프로세스에 붙어서 각종 정보들을 읽어들이는 기능이다. 
jstat, jstack 등을 통해서 제공 받을 수 있는 내용들을 이 명령어 하나로 처리할 수 있다. 운영에서  막 사용해도 될런지는 모르겠다.  
자세한 내용은 http://hirt.se/blog/?p=211 를 참조하기 바란다.

- Java Flight Recorder는 자바용 블랙박스라고 생각하면 된다고 한다. 
자세한 내용은 http://docs.oracle.com/cd/E15289_01/doc.40/e15070/introduction.htm 를 참조하기 바란다. 

- G1 안정화는 이제 좀 믿을만 하다는 것인가 ? 얘는 좀더 지켜봐야 할 듯 하다. 

어찌 되었건 JDK 7 으로 업그레이드가 된다면, Update 4 이상에서는 장애상황 확인이 보다 쉬워  질 것으로 보인다. ㅎㅎㅎ 

Posted by tuning-java
,

Java Performance 라는 사이트에서 제공하는 뉴스레터를 보다가 발견한 내용이다.

http://vanillajava.blogspot.co.uk/2012/02/high-performance-libraries-in-java.html


가장 마음에 드는 것은 구글의 구아바. (구글이 만들어서 웬지 더 믿음이 가~~~)

http://code.google.com/p/guava-libraries/


High scale lib 

http://sourceforge.net/projects/high-scale-lib/


Trove

http://trove.starlight-systems.com/


Fastutil

http://fastutil.dsi.unimi.it/


나중에 첫 책 2nd Edition 쓸때 참고해야겠다. ㅎㅎ


Posted by tuning-java
,

금요일에 점심먹으면서 이야기하다가,스칼라를 공부하고 싶다는 나에게 "황상철"옹께서 알려주신 주옥같은 사이트.

바로 트위러에서 만든 "Scala School" !!!

http://twitter.github.com/scala_school/

책 쓰는거 끝나면 공부해야징.

Posted by tuning-java
,
책의 내용을 보완할까 고민하다가, 그냥 블로그에 남기는 것이 나을 것 같아 여기에 정리한다.

Core dump 라는 것이 있다. 

만약 이 core dump 라는 파일을 들어본적도 없거나, 뭔지 모르는 분들은 지금까지 행복한 개발 / 운영 생활을 했다고 봐도 된다. 

리눅스에서는 gcore라는 명령어를 사용해서 코어덤프를 남길 수 있는데, 문제가 생겼을 때 (비 정상적으로 JVM이 죽었을 때 아무런 로그가 없는 경우등)에는 이 코어 덤프가 한줄기 빛이 될 수 있다. 

JVM은 보통 그냥 죽지 않는다. hs_err_pid.log라는 파일을 남기고 죽는데 이 파일을 보면 어느 작업을 하다가 죽었는지를 확인할 수 있다. 하지만 얼마전에는 이 파일도 안남기는 문제를 만났다. 

기본적으로 대부분의 서버에서는 코어 덤프를 남기지 않도록 되어 있다. 왜냐하면, java에서 1 GB 의 메모리를 사용하면 코어 덤프는 수십 기가에 달하는 파일을 생성하기 때문이다. 

JVM이 팍~ 하고 아무런 근거를 남기지 않고 죽었으면 둘 중 하나다.

누가 kill -9 pid로 프로세스를 죽었거나, segfault와 같이 프로세스 내의 오류로 죽는 경우다. 

그 범인을 잡으려면 로그를 봐야한다.

/var/log/messages 

파일을 root 권한으로 보면 그 시점에 어떤 오류가 발생했는지를 확인할 수 있다. 


1. 코어덤프 자동으로 생성하게 만들기

먼저 core dump를 자동으로 생성토록 하려면  ulimit -a 라는 명령으로 서버 설정을 확인한다. 

$ ulimit -a

core file size          (blocks, -c) 0

이하 생략

이처럼 가장 끝에 있는 값이 0 이면 core dump 는 안남는다. 덤프를 남기도록 변경하려면

ulimit -c unlimited

명령을 실행하면 core dump가 남을 것이다. 단 디스크가 꽉 차버릴 수가 있으므로 조심해서 옵션을 변경해야만 한다.

unlimited로 변경한 콘솔 창에서 실행한 프로그램은 팍~~ 죽어버리던, 문제가 생기던 core dump 가 실행한 위치에서 남는다. 확인해 보려면 자바 프로그램 아무거나 작은거 하나 실행하고 

kill -11 pid

를 실행해 보기 바란다. 그러면 core dump가 남아야한다. 만약 제대로 안했다면 코어덤프는 남지 않는다. 


2. 코어덤프 분석하기

코어덤프 파일을 열기 위해서는 gdb라는 프로그램을 사용하면 된다. 자바 프로그램을 확인하려면 

gdb /자바실행파일FullPath/java core.pid

로 실행하면 된다. 그러면 인터프리터 방식으로 이 툴을 사용할 수 있다.

gdb라는 것을 사용한게 별로 안되기 때문에 내가 옆에서 어깨 너머로 배운 명령어는 다음과 같다.

bt
info thread
thread 쓰레드번호
where
x/i 메모리주소값

각 명령에 대한 자세한 설명은 여기서 생략한다. 직접 한번 돌려보면 알꺼다. ㅎㅎ(나도 잘...)

그런데, 코드가 완전 C로 되어 있다면 스텍 정보들이 제대로 나오겠지만, java로 되어 있으면 보기가 어렵다. (그냥 메소드 이름이 ??로 나온다.)

그럴때 사용하는게 바로 jstack이다.


3. jstack 으로 core dump의 쓰레드 덤프 생성하기

jstack으로 coredump의 쓰레드 덤프를 생성하는 방법은 다음과 같다.

jstack /자바실행파일FullPath/java core.pid

이렇게 실행하면 jstack이 코어덤프에서 쓰레드 덤프를 추출해준다. 마찬가지로 jmap 을 이용해서 core dump  에서 힙 덤프도 만들 수 있다.

이제 필요한 덤프들을 생성했으면, 

"자바 개발자와 시스템 운영자를 위한 트러블 슈팅 이야기" 책을 보면서 원인을 잡으면 된다.

ㅎㅎㅎㅎㅎ




Posted by tuning-java
,
앞서 String.intern() 메소드를 사용하면 Perm 영역에서 GC가 많이 발생할 수 있다고 했다. 
http://tuning-java.com/455 참고.
그런데, 이 글을 읽는 분들은 대부분 아시겠지만, Perm 영역에는 클래스와 메소드등의 정보가 들어가게 된다. 많은 클래스를 읽어들일 수록 Perm 영역은 당연히 부족해지고, Full GC를 발생시킬 수 있다. 

이런 문제를 발생시키는 주된 원인은 Reflection을 사용해서 메소드 호출등을 할 경우도 포함된다.

왜 Perm 영역에서 Full GC가 발생할 수 있는지에 대한 설명이 잘 되어 있는 문서다. 
http://anshuiitk.blogspot.com/2010/11/excessive-full-garbage-collection.html

 관심 있는 분들은 한번 정도 읽어 보면 좋을 듯 하다. 

그리고, 
http://coding.derkeiler.com/Archive/Java/comp.lang.java.programmer/2006-11/msg00122.html
이 글도 보면 도움이 될 것이다. 
 
Posted by tuning-java
,
악성 코드가 있는 사이트를 방문했는지,
구글 크롬의 화면이 하얗게 변해버리는 일이 종종 발생했다.

구글 크롬의 임시파일을 지워도 별로 달라지는것이 없어서  캐시 디렉터리를 통채로 지우기로 마음 먹었다.
위치는
/Users/사용자아이디/Library/Caches/Google/Chrome/Default 
에 있으며 이 디렉터리를 통채로 날려버리면 된다.
 
rm -rf *

이렇게 지우고 나니 깔끔하게 모든 페이지가 작동중...
 
Posted by tuning-java
,
내가 지금까지 본 글 중에서 가장 마음에 쏙 들게 작성되어 있다.
(물론 시간 관계상 그림만 봤다. ㅎㅎ)

http://www.ibm.com/developerworks/java/library/j-codetoheap/index.html 
Posted by tuning-java
,
지난 주말 JCO에 갔다가 Byteman 이라는 툴을 알게 되었다.
사실 어떤 내용인지 모르고 Event Driven 세션 들어갔다가, 완존 약파는 (?) 내용인 것으로 보여서 후다닭 나온 다음에 이 세션으로 들어갔는데, 세션을 안 옮겼으면 후회할뻔 했다. 

http://www.jboss.org/byteman

작년에 JCO에서 내가 발표했던 BTrace(http://kenai.com/projects/btrace)의 단점이 보완 되었는지는 모르겠지만, 나름 훌륭한 툴인 듯 하다.  

발표자 분이 중간에 파일 찾다가 내가 작년에 발표한 파일이 있는 거 보고 약간 놀라긴 했지만, 재미있었다. ㅎㅎ 
 
Posted by tuning-java
,
작년 12월 초에 세미나 강의하러 갔다가 "프로그래머의 이야기를 책으로 만들자"라는 이야기가 나와서,
출판사 부장님이 오랫동안 고심한 기획서가 하나 나왔다.

아마도 6월정도엔 출시될 것 같은데, 한 사람이 쓰는 분량은 A4기준 30페이지 정도 될 것 같다. 
기술서도 아니라서 말을 풀어나가기가 쉬울것 같으면서도 어려울 것 같다.
(책을 찍어 낸 다음에는 수정도 못하니까...)

지금 쓰고 있는 책 진도율이 608 페이지에 94% 정도 되고, 2개 장이 남았는데 다 쓰고 이걸 쓸까? 아니면 이걸 먼저 쓰고 지금 쓰는 책을 끝낼까 고민된다.


여하튼 올해 내로 내 집필서 두권이 나오면 이제 집필서로 5권 채우는구나~~~ ㅎㅎㅎ

Posted by tuning-java
,
내가 기고한 어떤 글에 어느 분께서 질문을 올려서 여기에 정리한다.
질문의 골자는 "다른분께서 Perm 영역에서는 GC 가 발생 안한다고 했는데, Perm영역에서도 GC발생한다는 것이 이상하다"는 내용이다. 
나도 내 눈으로 확인하기 전까지는  GC가 발생안한다고 생각했으므로 당연한 질문이라고 생각한다.
지금까지 내가 무슨 이야기하는지 이해가 안되시는 분은
이글 (http://helloworld.naver.com/helloworld/1329) 먼저 읽으시면 조금 이해가 쉬울 것이다. 

다음의 소스를 보자.

public class InternTest {

  public static void main(String[] args) throws Exception{

    InternTest test=new InternTest();

    Thread.sleep(10000);   System.out.println("Starting");

    while(true) {

      test.callIntern();Thread.sleep(5000);

      System.out.print(".");

    }

  }

  private void callIntern() {

    for(int loop=0;loop<10000;loop++) {

      String a="1234567890"+System.nanoTime();

      String newString=a.intern();

    }

  }

}

 아주 간단한 소스인데, callIntern() 이라는 메소드를 보면 새로운 String을 계속 만들어 intern() 메소드를 호출하고 있다. 
이 클래스를 컴파일하고 jstat으로 모니터링하면 다음과 같은 결과를 볼 수 있다.
(jstat에 대해서는 "자바 성능을 결정짓는 코딩 습관과 튜닝 이야기"를 참조하거나,
http://helloworld.naver.com/helloworld/6043 를 참고하기 바란다.)

예를 들어 이 프로그램의 프로세스 ID가 4800 일 때 결과는 다음과 같이 출력된다.  

$ ./jstat -gcutil  4800 3s
  S0   S1   E     O    P     YGC  YGCT  FGC FGCT  GCT
  0.00 0.16 10.43 8.79 
98.37 3869 1.247 87  1.815 3.061
  0.02 0.00 52.12 8.77 
45.21 3884 1.250 88  1.840 3.090
  0.00 0.16 83.39 8.77 
98.89 3903 1.257 88  1.840 3.097
  0.00 0.16 27.11 8.78 
15.04 3919 1.262 89  1.857 3.119

 
P라고 표시되어 있는 내용의 값이 계속 변경되는 것을 볼 수 있다.
여기서 P가  Perm 영역의 사용량(%)인데, 보는 것과 같이 그 크기가 지속적으로 바뀌는 것을 볼 수 있다.
그리고 우측에 있는 FGC라는 값도 증가하는 것이 보인다.

자바의 Perm 영역에 클래스와 메소드 정보만 저장되어 있다고 생각하는 것이 일반적이지만,
실제로는 intern된 String 값도 이 영역에 저장된다. 

참고) intern된 String은 뭘까?
String은 기본적으로 equals()메소드로 값을 비교한다. 그렇게 되면 char값들을 비교하기 때문에 성능이 느릴 수 있지만, String 의 실제 값에 대해서 intern() 메소드를 호출하면 해당 값은 equals() 메소드가 아닌 == 으로 비교가 가능하다. 추가로 이  intern()메소드는 native 메소드로 선언되어 있다. 
하지만, 이렇게 String비교를 조금 빠르게 하기 위해서 intern() 메소드를 호출한 후 결과를 비교하는 것은 Perm영역을 마구잡이로 사용하겠다는 의미이기 때문에 "절대" 권장하는 방법은 아니다. 그냥 이런 것이 있구나 정도로 참고하고 있기 바란다. ^^;

추가로,
Perm영역에 어떤 데이터들이 저장되어 있는지 보려면 
jmap -permstat pid
명령어로 확인하면 되며,
그 결과에 가장 첫 출력물을 보면 interned String 크기가 출력된다.


2013.8.5 추가
와 
(의 댓글)에 따르면 JDK 7 이상 부터는 String.intern() 메소드의 호출 결과가 더 이상 Perm 영역에 들어가지 않고 Heap 영역으로 들어가게 되었네요. ^^;


 


Posted by tuning-java
,

top이라는 명령어로 리눅스를 모니터링하다보면
VIRT 와 RES가 있는 것을 볼 수 있다. 


man top 에서 확인해 보니

VIRT  --  Virtual Image (kb)

          The total amount of virtual memory used by the task.  It includes all code, data and shared libraries plus pages that have been swapped out. (Note: you  can define the STATSIZE=1 environment variable and the VIRT will be calculated from the /proc/#/state VmSize field.)

          VIRT = SWAP + RES.


RES  --  Resident size (kb)

          The non-swapped physical memory a task has used.

          RES = CODE + DATA.


요렇게 나온다. 

결론적으로 해당 프로세스에서 물리적인 메모리를 사용하는 크기는 RES 이며,

SWAP 영역에서 사용하는 메모리 + shared + swapped를 합친것이 VIRT 다.


따라서 VIRT 값과 RES 값의 차이가 크다는 이야기는 SWAP 을 쓸 확률이 높다는 의미 인 것으로 보인다. 자바에서는 Shared 메모리의 크기가 그리 크지 않으므로, 만약 VIRT 만 크다면 SWAP 확인해 보고, 애플리케이션에서 도대체 무슨 일이 일어나는지를 잘 째려봐야 할 듯 하다.

어떻게 째려 봐야 할지는 좀 고민 해봐야 할 듯~~~ 

Posted by tuning-java
,
지금까지 알만한 분들에게만 이야기한 지금 집필중인 책의 진척사항을 정리해보고자 한다.

현재 열심히 집필중인 "OO 자바"의 집필 진도율을 오늘 확인해 봤더니 90%다.
1월 중순이니 2월말까지 본문에 대한 집필은 끝낼 수 있을 것 같다. ㅎㅎㅎ

3월부터 두달간은 베타 리더들을 선정하여 베타리뷰 진행하고,
그 사이에 부록을 정리할 예정이다. (부록을 열심히 보는 사람은 그리 많지 않으므로. ㅎㅎ)
4월말, 5월초에 출판사에 넘기면 7월초에 나올 듯 하다.

이 글을 읽는 여러분들이 지금까지 봐 왔던 자바책과는 완전히 다른,
현업에서 꼭 필요한 주옥같은(?) 내용들만 포함되어 있는 책이라 기대해도 좋을 것이다.

마음 같아서는 모두 대박나라는 뜻에서 "대박 자바"라고 하고 싶지만,
이 책의 이름은 벌써 정해 졌다.
(7월달이면 모두 알게 되겠지만... ) 

이 책 출간이 완전히 끝나면,
잠시 쉬었다(?)가
나의 첫 책 리뉴얼에 들어갈 것이다.  
("자바 성능을 결정짓는 코딩 습관과 튜닝 이야기"의 2nd edition ... ㅎㅎㅎㅎㅎ )  
Posted by tuning-java
,
subversion이라는 소스 저장소를 사용할 때 이클립스와 연동하려면,
suvversive 나 subclipse 중 하나를 선택해서 일반적으로 사용한다.

이번에는 subclipse를 설치했고,
방법은 다음과 같다.

1) Java HL 설치
subclipse가 c 기반으로 개발되어 있으므로, 이클립스와 통신하기 위해서는 자바 기반으로 되어 있는 Java HL 이라는 것을 설치해야만 한다. 여러가지 방법이 있겠지만, 맥에서는 그냥 맥포트를 사용하면 된다.
$ su
(root 권한으로 로긴)
$ port install subversion-javahlbindings
(Java HL 설치... 별걸 다 설치한다. ant, junit 등을 최신버전으로 ...)
마지막에 나오는 Java HL의 버전을 꼭 확인한다. 


2) subclipse 설치
http://subclipse.tigris.org/ 
에서 Java HL 버전에 맞는 subclipse 업데이트 URL을 확인한 후 이클립스에서 설치 작업 진행.
그냥 모두 선택하고 설치하면 됨.
(뭐 자세한 내용은 다 알테니 패스)
 
이렇게 설치 해서
이클립스 -->  환경 설정 --> Team --> SVN 으로 이동했을 때, 중간에 있는 Java HL 드롭다운 박스에서 Java HL이 잘 먹혀 있다는 메시지가 나오면 끝.
(버전이 안맞으면 다시 설치해야함. 너무 앞서가서 subclipse를 최신 버전으로 깔아버리면 안됨 - -) 
Posted by tuning-java
,
현재 사용하는 장비와 물려있는 네트워크 상의 장비에 대한 맥 어드레스를 확인할 일이 생겼는데, 알 방법이 없서 막막했다.
(맥 주소는 보통 16 진수의 조합으로 나타나는데, 해당 장비에서 제공한 맥 주소는 그냥 숫자로 나와서리 - -)

하지만, 구글링을 통해서 확인해 본 결과 다음의 명령어를 사용하면 된다.

arp -a

확인 결과 맥에서도 되고 윈도우에서도 된다. 그러나 리눅스에서는 안된다. (이것도 뭔가 있겠지? ㅎㅎ)
 
그런데, 그냥 숫자인 10진수로 나타나도 공학용 계산기로 16진수로 변환하면 동일하다는 것도 확인했다.  
Posted by tuning-java
,

 http://publib.boulder.ibm.com/wasce/V1.0.1/ko/Tasks/Tuning/Linux.html  
링크를 보면 TCP 설정을 어떻게 해야만 성능을 최적화 할 수 있는지 나와 있다.

timeout_timewait : TCP/IP가 닫힌 연결을 해제하여 자원을 다시 사용하기 전에 경과되어야 하는 시간은 
/proc/sys/net/ipv4/tcp_fin_timeout
파일에

tcp_keepalive_time : TCP/IP가 대기 연결이 계속 원래 상태를 유지하는지 확인을 시도하는 빈도 값은 
/proc/sys/net/ipv4/tcp_keepalive_time
파일에 (초 단위임)

tcp_keepalive_intvl : 상대로부터 활성화 상태 지속 응답이 수신되지 않을 경우 TCP/IP에서 활성화 상태 지속 전송을 반복하는 빈도 값은
/proc/sys/net/ipv4/tcp_keepalive_intvl
파일에

tcp_keepalive_probes : TCP/IP가 기존 연결에 대한 수신확인되지 않은 활성화 상태 지속 메시지를 재전송하는 횟수를 결정 값은
/proc/sys/net/ipv4/tcp_keepalive_probes
파일에 각각 선언되어 있다.  
 
Posted by tuning-java
,
Posted by tuning-java
,

주의 : 본 내용은 지극히 개인적인 의견과 잘못 알아들은 부분도 있을 수 있으므로, 실제 제대로 된 내용은 PT 자료를 통해서 확인하셔야만 합니다요.

회사를 옮긴 이후에 운이 좋아서 작년에 이어 여차저차해서  ApacheCon이라는 해외 컨퍼런스에 참석하게 되었다. 

올해는 밴쿠버에서 열렸고, Westin Bayshore라는 호텔(다운타운에서 20분은 걸어야 하는… 하지만 전망은 좋은)에서 진행했다.

벤쿠버에 4~5년전에 와이프랑 왔었기 때문에 여기저기 여행은 하지 않았다. 


전반적인 분위기 :
전반적으로 그들만의 리그라는 생각이 많이 들었다. 
여기서 그들은 Committer들과 영어 잘하는 (?) 사람들을 말한다.
컨퍼런스에 두번째이지만, 보통 동양사람들에게는 안면이 트이지 않는한 말을 잘 걸지 않고,
엄청나게 적극적이지 않으면 많은 대화를 하지 못한다는 것.
하지만, Meet up 이라는 야간 행사(20시~22시)에 관심사가 있는 사람들 및 커미터들과 이야기 할 기회가 있으니 적극 활용해야만 한다.

그리고, 한가지 더 중요한것은 매우 조촐했다는 것이다.
한 300명 정도밖에 안온것 같았고, 그 중 100명은 커미터라고 보면 될 듯 하다.

같은 기간에 하둡월드인가 뭔가가 있어 많은 사람들이 그 곳으로 간 것으로 보이며,
하둡과 클라우드 관련 세션은 3일 내내 진행되었기 때문에 클라우드가 전 세계적(?)으로 얼마나 인기가 많은지 알 것이다.


개략적인 진행 순서 : 참고로 각 기술에 대한 내용은 아래에 따로 정리하겠다.

D-1 : 컨퍼런스는 총 3일이지만,
그 전날에 University라고 해서 거진 70~100 만원을 내고 수업을 듣는게 있는데,
거의 신청한 사람이 없는듯 했다. (나도 물론 신청은 안했다.)
하지만 barCamp라는 것이 있고, 각 분야의 전문가들과 이야기할 수 있는 기회가 있다.
만약 앞서 이야기한대로 매우 적극적으로 뭔가 알아가려면, 하루 더 전에 와서 이 행사에 참여하는 게 좋을 듯 하다.
(스케줄에도 나와 있지 않다.)
예전에 같이 일하다가 다른 회사로 옮긴 X구라라는 선배를 우연찮게 만났고,
검색엔진인 Lucene을 만든 커미터도 잠깐 얼굴을 봤다.
(오며가며 보면 가장 인기가 많은 듯 해 보인다.)


Day 1 : 
주제별로 Track이 있고 거기서 필요한 내용들을 찾아 들으면 된다.
보통의 우리나라 세미나와 다를게 거의 없다.
이날은 Tomcat 위주의 내용을 들었으며 TomEE와 죽어가는 Geronimo에 대해서 들었다. 
첫날 저녁에는 식사를 제공하고 Meet up 이 있는데
나는 Callback이라는 PhoneGap의 오픈소스 버전에 대한 설명을 듣다가 Rave라는 것에 대해서 듣다가 나와서 잤다. 


Day 2 : 

첫째날과 동일하며 대부분 Httpd와 관련된 내용을 들었다.

Httpd 2.4와 Apache Traffic 서버가 인상 깊었고, 특히 Apache Traffic 서버 만든 아저씨는 오덕중에 오덕이었다. 이렇게 쌀쌀한 날씨에 반바지 입고 모자쓰고 발표했다. 게다가 유머 감감도 최고 였다. 누군가 올해 내로 정식 릴리즈가 되냐고 앞에서 조그맣게 이야기 했는데, "Go the hell"이라고 말하고 넘어가버렸다는... 

저녁에는 앞에 나와서 아무런 주제로 한사람당 5분간 이야기하는게 있는데,

이건 뭐 슬라이드도 없어서 이해하기가 매우 어려워 듣다가 Tomcat Meet up 을 위해서 7-11에 가서 과자 부스러기를 갖고 와서 Tomcat Meet up 에 참석했다.

이 Meet up 의 결과에 대해서도 아래에 정리하겠다. 


Day 3: 

마지막 날에는 약간 어수선한 분위기와 함께 좀 흥미가 떨어지는 내용들이 많았다.
하지만 Kafka라는 것을 알게되어서 이날의 일정은 아깝지가 않았다.
마지막날은 5시에 땡~ 하고 끝나서 다운타운 가서 뭐 살거 없나 두리번 거리다가,
그냥 방에 와서 짐 정리하고 이 글을 쓰는 중이다.


그럼 이제 기술적인 이야기를 해보자.

Tomcat :
Tomcat Comet에 대해서 설명을 들었는데, 2001년부터 커미터로 있는 스페인 아저씨가 진행했다.
그냥 헬로월드 찍고 끝났다. 뭐 그 이하도 그 이상도 아니였다. 
둘째날 저녁에 참석한 Meet up 은 조촐하게 10명 남짓이 모였으며, 그 중에서 5명 정도가 커미터였고 Comet 설명한 아저씨 옆에 앉았다. 사람이 적으니 각자 자기 소개를 하라고 했는데, 커미터들 소개를 하더니 모든사람에게 자기 소개를 하라고 했다. 
내가 가장 마지막에 소개를 했고, 내가 어떤 회사에 일한다고 하니 다 알지 못했다.(뭐 당연하지…)
Tomcat 이 설치된 서버가 X대 정도 있다고 하니 모두 놀랐는데, 지금 생각해보면 한 두배 이상(세배가 될수도...)은 뻥튀기 한거 같다. ㅎㅎㅎ - -;
여하튼 내가 몇가지 궁금한 것과 Tomcat의 고칠점들에 대해서 이야기했는데, 대부분 잘 들어 주고 답변들도 잘 해줬다. 
근데, 첨에 이야기한 항목은 고칠 생각이 없는듯 했다. 그냥 방법만 다들 알고 있는 알려주었을 뿐.(이건 사내 보안상 이야기 하긴 어렵고…) 5분이면 된다면서…

두번째 이야기한건 Web Socket 을 사내에 구현한게 있는데 연결당 메모리가 높아서 다른 웹서버로 갈까 하고 있다고 하니까 그건 들여다 봐야겠다고 했다.

그리고, 마지막 질문은 Tomcat 8은 언제 나오냐고 물어봤는데, 모두 일단 웃고 시작했다. 

Servlet Spec 3.1의 Spec인 JSR 340( http://jcp.org/en/jsr/detail?id=340 ) 기준으로 할 것이며, 다들 아직 구현할 준비는 되어 있지 않아 보이고, 2013년에나 나올까? 라는 답만 들었다. 그렇다는 이야기는 Tomcat 8은 JDK 7 기반으로 된 WAS이기 때문에 JDK  7 기반의 서비스를 뭔가 하려면 Tomcat을 쓰는 회사는 적어도 2년 뒤인 2013년까지 기다려야 하고, 2014년은 되어야 안정적인 버전을 쓸수 있지 않을까하는 개인적인 생각이다. 

추가로 25명 정도 되는 커미터중에 10명 남짓만 일하고 있으니, 참여하고 싶으면 언제든지 받아주겠다면서 Meet up이 끝났다. 그리고, Web Socket 관련된 이야기로 Meet up을 시작했었는데, 관련된 구현체가 없어서 일단 Apache Incubator 에 올리자고 결정이 되었다. 

참고로 커미터중에 일본 친구가 한명 있어서 하둡쪽에 있는 일본 커미터와 같이 일했던 선배 4명이서 같이 저녁 식사를 했다. 많은 이야기를 나누었는데, 그 중에 "니네들 언제 만나냐?"고 물어보니 "ApacheCon 에서만 만난다. ㅎㅎ"라고 대답했다. 특히 Tomcat은 다국적인 친구들이 일을 하고 있어서 대부분 이슈 관련 보드와 메일로 내용을 주고 받으며, 그 일본 친구가 커미터에 들어가기 위해서 50번이나 트라이했다고 들었다. 


TomEE(그냥 타미라고 발음하면 됨) :

J2EE 를 구현한 올해 초에 시작된 프로젝트로 OpenEJB와 OpenSSL등으로 구성되었다고 한다. 
그러면서 절대 J2EE 자체가 무거운 것은 아니라고 재차 강조하고, WAS를 embedded 버전으로 띄워서 자동으로 테스트 코드를 실행하고 프로세스를 shutdown까지 하는데 4초밖에 안걸리는 데모를 보여주었다. 그러면서, 방금 돌린건 첫번째라서 그렇고, 두번째는 더 빨라집니다 하면서 돌렸는데도 4초 걸렸다. ㅎㅎㅎ 뻘쭘해 하면서 그냥 4초 걸린다고 알아라하고 넘겼다. 


Geronimo :

그냥 죽은 WAS라고 생각하면 되며, 누군가 TomEE랑 뭐가 틀리냐고 물어보니 OSGi 적용이 가능하다고 이야기하면서 끝냈다. ㅋㅋ


Callback (PhoneGap) : 

Apache incubator 에 있는 것이며, PhoneGap과 동일한데 아파치라이센스를 준수한다고 보면 된다. 그런데, 여기서 Apache incubator가 뭔지 잠깐 설명하면, 정상적인 Apache 프로젝트가 되기 위해서는 이 과정을 거친다고 한다.

여하튼 Callback은 웹앱을 하나 만들면 모든 플랫폼에서 돌아갈 수 있도록 하는 것이라고 생각하면 된다. 안드로이드, 아이폰, 블랙베리, 심지어는 바다 폰에서도 돌아간다고 한다. 어도비에서 나온 사람이 발표했고, 어도비에서 후원한다는 이야기를 많이 했다.


Rave :

이건 사내 인프라나 어떤 사이트를 아주 빠른 속도로 만들 수 있도록 미리 많은 기능들을 포함해 놓은 일종의 플랫폼이라고 보면 된다. 나중에 커미터에게 다국어 지원하냐고 물어봤는데, 다 된다고 이야기는 했다. 되는지는 확인해 봐야겠지만…


HTTPD(흔히 이야기하는 아파치 웹서버)  v. 2.4 :
Jim이라는 백발이 성성한 Tomcat / Httpd 커미터 아저씨가 발표했다. 
이번달에 최종 버전이 나온다고 한다. (지금까지는 베타)
Async I/O를 제공하고, 실시간 설정값 변경이 가능하며, Load Balancer  관리화면에서 실시간으로 부하를 분산하는 설정을 변경하는 것을 보여줬다. 
참고로 Nginx가 가장 큰 경쟁자로 보였고, Nginx와의 성능 비교자료를 보여줬다. 


Apache Traffic 서버 :

1999년 부터 사용되었고, Yahoo 로 넘어갔다가 올해 Apache 로 제공하는 Traffic 서버다. 정적인 데이터를 캐시해 놓는 능력이 탁월한 서버라고 보면 된다. 여튼 성능 하나는 가장 상위 목록에 들어가는듯 하다. 


Apache Kafka :

이것도 인큐베이터에 있으며, Pub/Sub 서버(문서에서는 Broker라고 표현)라고 보면 된다. Producer가 대량의 데이터를 저장하고, 대량의 사용자에게 정보를 제공할 수 있는 서버다.
Linked In 에서 나온 인도 출신으로 보이는 여자 엔지니어가 발표했는데 매우 차분하게 말을 했는데도 불구하고 특유의 인도 억양이 좀 있어서 100 % 알아듣지는 못했다. (물론 다른 설명들도 100% 알아 들었다는건 절~대 아니다.)
여하튼 파일 기반의 데이터를 핸들링하며, 속도는 빠르지만 아직 해결해야 하는 항목들이 좀 남아있었다. 

관심있는 분들은 함 보시길…


컨퍼런스 자료는 아직 공유되지 않았으며,

http://na11.apachecon.com/ 를 눈이 빠지게 지켜보면 조만간 나올것이다. (누구나 다운로드 가능)

음성자료는 이미 있으니, PT 자료와 함께 보면 내가 얼마나 힘들었을지 알게 될 것이다. (그런데 확실히 음성만 들으면 잘들리긴 한다. ㅎㅎㅎㅎㅎ)

결론적으로 나는 가장 필요했던 것이 Tomcat과 Apache Httpd 서버와 관련된 부분이라 필요한것들은 어느 정도 얻었으니 큰 후회는 없다. 

하지만, 다시는 참석은 안(못) 할 것 같다는거~~~.

추가로 NexR에서 참가한 분중 한분의 후기는
http://pudidic.wordpress.com/ 
를 참고 하시면 될 듯 하다.
그리고 실황 중계를 하신 안XX 선배의 트위러는
https://twitter.com/#!/grazieash 
이니 참고하기 바란다. (사실 이분 트위러 좌표 확인하느라 좀 늦게 올린다.)

See you at Korea ~~~~~ 
 

Posted by tuning-java
,
.vimrc 파일과 컬러 스키마를 변경하여 vi의 색을 원하는 대로 변경해보자. 

1. .vimrc 파일 만들기 
맥에서는 .vimrc 파일이 기본으로 생성되어 있지 않다. 
따라서, 다음의 절차를 따라가면 샘플에 있는 내용으로 .vimrc 파일이 생성된다. 
vi
:edit ~/.vimrc
:read $VIMRUNTIME/vimrc_example.vim
:write

근데 개인적으론 그냥 웹에 있는 걸 다운로드 받아서 쓰는게 깔끔할 듯...

2. color pack 다운로드하고 필요한 폴더에 복사하기 
이제 
http://www.vim.org/scripts/script.php?script_id=625
으로 가서 가장 아래에 있는 zip 파일을 다운로드하고 나서 풀자.
plugin 과 colors라는 디렉터리를 계정 디렉터리 아래에 있는 .vim 디렉터리 밑으로 이동한다.
즉,
~/.vim/plugin

~/.vim/colors 
가 되도록 하면 된다.

만약 .vim 디렉터리가 없더라도 당황하지 말고
mkdir .vim
이라고 하나 만들어 주자.

3. color 를 선택한 후 지정하기
vi .vimrc
를 쳐서 .vimrc 파일을 만들자.
위의 링크에 있는 여러 샘플중 마음에 드는걸 골라서 .vimrc 파일의 가장 첫줄에 다음과 같이 추가하자.
colorscheme darkblue
(갑자기 dark한게 좋아져서...)
이제 :wq 로 저장한 후 다시 vi를 들어가면 설정한 컬러 테마로 vi가 바뀌어 있을 것이다.

 
Posted by tuning-java
,
http://www.webmo.net/support/java_memory.html

요즘 애플릿을 사용하는 프로그램을 쓰고 있는데,
메모리가 부족해서 항상 버벅거린다.
이러한 문제를 해결하기 위한 방법은 바로 메모리 크기를 증가시키는 것 !!!

위의 옵션대로 값을 변경 한 후 해당 브라우저를 재시작하면 지정한 값이 먹는다.
나는
-Xms256m -Xmx512m 으로 설정해 놨다. ㅎㅎㅎ  
Posted by tuning-java
,
https://oracleus.wingateweb.com/scheduler/eventcatalog/eventCatalogJavaOne.do

솔직히 돈 500~600 정도 써가며 JavaOne을 갈 필요가 이제는 없어졌다고 생각한다. 
(오라클로 넘어간 이후에...)

하지만, 자료들은 반드시 확인해 봐야만 한다.
무슨일이 있어도...

이 링크들이 언제 깨질지는 모르겠지만,
필요한 자료들 잘 살펴보시길...
(MP3도 같이 제공하면 더 좋았을 것을 ~~~)  
Posted by tuning-java
,
페북을 보다가 예전에 같이 일하던 분이 잘 정리한 링크를 올려 두어서 내 블로그에도 같이 정리한다. 

http://www.softwaretestingstuff.com/2011/09/performance-testing-vs-load-testing-vs.html 

Performance Test 와  Load Test 그리고, Stress Test 의 차이를 잘 설명해 두었다.
(다행히 지금 회사에서 강의하고 있는 내용과 동일한 설명이네... ㅎㅎ ) 
Posted by tuning-java
,

http://blog.nextcube.pe.kr/entry/ssh-%EC%9D%B8%EC%A6%9D%ED%82%A4%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8

그리고, 아래 URL도 정리가 깔끔하게 잘 되어 있다. 

http://newstars.tistory.com/122


2012년 4월 13일 추가

여기서 중요한 것은 키의 권한인데.

맥OS를 사용하면 
.ssh 디렉터리는 chmod 700 .ssh
id_rsa 파일은 chmod 600 id_rsa 
로 권한을 지정해야 함. 

그렇지 않으면 

bad permissions : ignore key : 하면서 패스워드 물어봄. 




Posted by tuning-java
,
몇년간 업데이트가 되지 않았던 
JVM Spec 문서(1999년이 최종이었음)와
JLS (2005년이 최종이었음)
문서가 이번에 JDK 7이 나오면서 새로운 버전의 문서가 제공되고 있다.

기존의 버전 번호를 그대로 가지 않고,
Java SE 7 Edition
이라는 이름으로 문서 이름이 바뀐 점이 특이하다.

다운로드 링크는 요기다. 
http://download.oracle.com/javase/cmn/spec_index.html 

영어인건 다 아시죠?  
Posted by tuning-java
,
http://www.theserverside.com/discussions/thread.tss?thread_id=62891
이 글을 읽어 보면,
JDK7에 적합한 Tomcat 8 을 준비한다고 한다.

게다가 JDK7은 Crash가 발생하는 버그도 있고...
Tomcat 8이 나온 후 안정화 되려면 멀었으니,
결론적으로는 JDK 7을 제대로 쓰려면 1년 이상 기다려야 한다는 이야기...

 
Posted by tuning-java
,
얼마전 만든 자료다. 

관심있는 분들은 한번 보시길...

나중에 시간 나면 좀 더 업그레이드 할 예정이다.
(10분짜리 발표를 위해서 만든 자료라...)

Posted by tuning-java
,
맥에 기본적으로 아파치 웹서버는 설치되어 있다.
하지만, 별도의 웹서버를 설치하려면 다음과 같이 하면 된다.

0. 컴파일을 위한 Xcode 설치
컴파일을 위해서 Xcode를 설치한다.
Apple App Store에서 무료로 다운로드 할 수 있다.

1. Apache 다운로드
http://httpd.apache.org/download.cgi
여기서 적당한 것을 다운로드한 후 압축을 푼다.

2. 설치
설치할 때 다운로드 압축을 해제한 디렉터리에서 다음과 같이 컴파일 하면 된다.

./configure
make
make install



그런데 만약 특정 위치에 설치하려면 다음과 같이  --prefix를 지정해 주면 된다.
예를 들어 /develop/apache 에 설치하려면

./configure --prefix=/develop/apache/

 라고 지정하면 된다.

3. 설정 변경
그냥 실행하면 80포트가 충돌난다고 하기 때문에
/develop/apache/conf/httpd.conf 파일을 열어서

Listen 80

이라고 되어 있는 것을

Listen 9999

로 변경하자.

 4. 실행
/develop/apache/bin/ 으로 이동하여
./httpd
라고 실행하면 된다.
제대로 도는지 확인하려면,
브라우져을 열어

http://localhost:9999

로 접속해보면 된다.
 
Posted by tuning-java
,
나의 네번째 책 집필 진도율이 51%를 찍었다. ㅎㅎㅎ
부록을 빼고 계산한 진도율이니,
아직도 많이 남은거다.  - -;
처음에 계획한 Chapter수가 20개 였는데,
지금은 어느새 36개가 되었다. 
(쓰다보니 필요한 것을 추가하고, 하나의 장이 너무 길면 자르고 해서 늘어났다.)

내년 초에나 나올것 같은 느낌이다.
그래도 제대로 된 책이 나가는게 좋지 ...

 
Posted by tuning-java
,
http://www.vineetgupta.com/2010/11/how-browsers-work-part-1-architecture/

브라우저가 어떤 방식으로 데이터를 처리하여 화면을 보여주는지에 대해서 자세히 설명된 글이다.

웹 UI로 먹고 사는 분이라면 꼭 읽어 보시길 바란다.
그런데, 작년 11월에 작성된 Part - 1 문서인데, 아직까지도 Part-2 문서는 엄따.
작성자가 좀 바쁜가부다. 
Posted by tuning-java
,
가끔 어떤 서버에 들어가서 작업할때 vi와 같은 에디터에서 
편집모드에서 커서 이동이 잘 안되고, 이상한 문자가 찍혀버릴때가 있다.
그런 경우에는 로케일이 한글로 되어 있을 확률이 높다.
따라서 콘솔 창에서

$  locale

이라고 쳐 보면 지역 정보가 어떻게 되어 있는지를 볼 수 있다.
어떤 로케일을 지원하는지 보려면,

$ locale -a

이라고 입력해보면 된다.
서버의 설정을 변경하지 않고,
지금 작업하고 있는 장비의 터미널창에서만 사용하는 로케일을 변경하려면

$ export LC_ALL=C

라고 지정하면, 모든 로케일을 C에 맞추어준다.

 나도 어깨너머로 배운거라서,
더 자세한것을 물어보면 모른다는 답변밖에~~~ ㅋㅋ 
Posted by tuning-java
,
http://www.enigmastation.com/?p=640

뭐 당연한 말일 수도 있지만,
읽어둬서 나쁠 것은 없을 듯 하네요.

나중에 시간나면 요약해야지~~~
 
Posted by tuning-java
,