Java에서 OutOfMemoryError가 발생할 경우 Native 한 코드가 원인이 될 수 있다. 

이 경우에 어떤 것들을 봐야 하는지 정리가 잘 되어 있는 자료.

http://javaeesupportpatterns.blogspot.kr/2012/09/outofmemoryerror-unable-to-create-new.html

한국어로 된 자료는 없으나, 내 책엔 조금 거론은 되어 있기는 하다. 

http://www.yes24.com/24/goods/5209760?scode=032&OzSrank=1

나중에 (그럴 확률은 적지만) 이 책의 2nd Edition이 나오면 이 내용들을 좀 추가 보완해야 할 듯.

신고
Posted by tuning-java Trackback 0 : Comment 0

WAS의 쓰레드에 Lock이 얼마나 걸려 있는 지를 실시간으로 JSP에서 확인할 수 있는 페이지입니다. 

책에 올렸는데, 요청하시는 분들이 간혹 계셔서 그냥 블로그에 올립니다. ㅎㅎ

소스 보시면 아시겠지만, 별건 아니에요.


CheckThread5.jsp


CheckThreadGC.jsp


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

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 Trackback 0 : Comment 0
"자바 개발자와 시스템 운영자를 위한 트러블 슈팅 이야기"라는 깔끔한(?) 제목의 책이 조만간 나온다. (아마도 6월 중순에는 시중에 풀릴겁니다.)

2010년 1월 3일부터 집필을 시작하여 6개월간 딴 책(안드로이드)을 쓰다가 너무 광활한 범위에 포기하고, 올해 1월부터 다시 정리하기 시작하여 집필한 책이다. 

이번 주말에 마지막 원고 리뷰 후 정리하면 6월 중순쯤 될 예정이다.

이 책의 구성은 다음과 같다.
- 웹 기반의 시스템의 장애 유형
- 쓰레드 문제와 해결 방법
- 메모리 문제와 해결 방법
- 진단을 위한 무료 툴들
- 많은 자바 개발자들이 취약한 리눅스에서 리소스를 모니터링 하는 방법
- 장애 유형에 따른 진단 절차
뭐 울트라 킹왕짱 자바 개발자 및 자바 엔지니어는 다 알고 있는 내용이므로 보실 필요는 없겠지만, 장애에 허덕이고 있는 분들은 이 책을 보면 문제 해결의 답이 보일 수도 있다.

WebTune, Jennifer, Pharos등의 APM들을 사용하는 분들이라도 그 툴들에서 잡을 수 없는 문제들을 잡는 방법이 나와 있기 때문에 분명 도움이 될 것이다. (이 툴들이 나쁘다거나 부족하다는 것은 저~~~얼대 아님) 

지금까지의 내 책들과 다르게, 출판사에서 적극적으로 내가 쓴 모든 문장을 가독성이 좋도록 바꿨기 때문에 책에 대한 가독성은 크게 문제하지 않아도 된다.

최초에 보낸 원고의 페이지는 그리 많지 않았는데, 조판 작업 후 페이지가 많아져서 부득이하게 가격은 24,000 원으로 책정했다고 한다. T T;
내가 책정한 것은 아니니 저를 원망하지는 말아주시구요~~~

아무쪼록 이 책이 장애에 허덕이고 있는 많은 개발자와 시스템 운영자 분들에게 도움이 되길 바랍니다.
 
신고
Posted by tuning-java Trackback 0 : Comment 1
작년 1월 3일부터 집필한 자바 트러블 슈팅 책의 원고를
한개 장과 부록 한개장을 제외하고 이미지까지 출판사에 넘겼습니다.

혹시나 해서 말씀드리지만, 이 책을 제대로 보시려면
"자바 성능을 결정짓는 코딩 습관과 튜닝 이야기"와
"자바 개발자도 쉽고 즐겁게 배우는 테스팅 이야기"를 함께 보셔야 됩니다. ㅎㅎㅎ

지금 안본다고 버리지 마세요...

궁금해 하실만한 목차는 책 출간 2주정도 전에 오픈할예정입니다.
(궁금해도 참으3)

출판사에서 뚜다닥 해주시면 5월말 출간(?)
약간 느려져도 상반기내에는 나올겁니다.  ㅎㅎㅎ
 
신고
Posted by tuning-java Trackback 0 : Comment 0
이번주에 Blog2Book 시리즈의 나의 세번째 책인 
트러블슈팅 책을 출판사에 전달할꺼다.
(정확하게는 다음주 월요일 아침(4/4)에 전달 예정)
그런데 볼때 마다 내용이 바뀌니 걱정이다.

오늘부터는 퇴근 버스에서도 리뷰~~~
아가 잠들면 밤늦게까지 리뷰~~~

보고 싶으신분들은 두달(or 세달)만 기다려주세요 ~~~

"자바 성능을 결정짓는 코딩 습관과 튜닝 이야기"의 부족한 부분을 채우는 버전이라고 보시면 되겠습니다. ㅎㅎ.

 
신고
Posted by tuning-java Trackback 0 : Comment 1
조만간 출판사와 계약을 하고 2월 말에 원고를 넘길 계획이다.

아무리 늦어도 5월에는 책이 나올 수 있지 않을까 조심스럽게 생각하고 있다.

지금까지 써 왔던 Blog2Book 시리즈로 낼 확률은 90% 이상이다. ^^;
신고
Posted by tuning-java Trackback 0 : Comment 2
실제 중단한 것은 지난 6월 말 경이지만,
이제야 글을 쓴다... 

6개월동안 약 80%의 집필을 완성하였으나,
시기상 다른 책을 먼저 쓰기로 했다. ㅋㅋㅋ

나와 같은 회사를 다니는 분들은 이 트러블 슈팅 책에 있는 내용을 기반으로 
올해 10월에 1일짜리 과정이 개설되니 미리 맛 볼 수 있을 것이다.

그 다른책은 바로 안드로이드 책~~~.

지금까지 1개의 연습 앱 (이건 릴리즈 안했음)
1개의 실제 배포 앱(이건 한달간 2000 다운로드 달성. - -)
또 한개의 실제 배포 예정 앱 (이번 주말 배포 예정)
을 만들어 본 결과 
한 두개의 앱만 만들어 봐도 더이상 책을 들여다 볼 필요는 없다는 결론을 내렸다.
하지만 내가 지금까지 Swing, SWT, GWT 등에 대해서 개발해온 경험으로 만들어 봤기 때문에
쉽게 만들 수 있었다고 생각한다. 
그래서 GUI 환경(JSP와 Servlet은 제외)에 익숙하지 않은 개발에 관심있는 사람들이 정말 쉽게 따라할 수 있는 그런 책을 써 보려고 한다.

여하튼, 안드로이드 책 한권 내고, 트러블 슈팅은 바로 마무리해서 내년 상반기에 출간을 목표로 할 예정...

그리고 안드로이드 책은 적어도 2권 이상의 시리즈 물로 낼 예정임다.
신고
Posted by tuning-java Trackback 0 : Comment 0
분명히 필요한 분들이 있을 것이라 생각하여,
트러블 슈팅 가이드 집필을 시작할 것이다.
웹으로 공개할 것은 아니고,
2010년 6월 집필 완료를 목표로~~~
신고
Posted by tuning-java Trackback 0 : Comment 3