자바 힙 덤프 분석기는 jhat등 여러가지 툴이 있지만,
최근에 발견한 Eclipse Memory Analyzer 라는 프로그램이 있다.

http://www.eclipse.org/mat/

다운로드하여 압축을 해제하고, 이클립스만 수행하면 된다.
단, 기본 자바 VM을 사용할 때 발생한 HPROF 덤프 파일의 확장자는 반드시 hprof 여야만 읽을 수 있다.

작성된 힙 덤프 파일을 이 프로그램에서 읽으면 다음과 같은 화면을 제공한다.
사용자 삽입 이미지

Posted by tuning-java
,
오늘 팀장님께서 복사한 문서를 한번 읽어 보라고 주셨다.
9개의 자바 성능 팁에 대해서 아~주 간단하게 정리되어 있는 문서다. (2페이지에 걸친...)

그 장의 첫번째 구문에는 Michael A. Jackson 이라는 할아버지가 쓴 글귀가 있다.

The First Rule of Optimization : Don't do it
The Second Rule of Optimization (for experts only) : Don't do it yet.

이 문서가 언제 쓴 문서인지는 모르겠지만.... 이 글귀는 약간 이해는 안된다. ^^;

Tip #1 : Object creation is bad
Tip #2 : static is good  ==> I don't think so 다.
Tip #3 : Table switch good, lookup switch bad
Tip #4 : Small methods are good methods
Tip #5 : Exceptions are exceptional
Tip #6 : Use decorator patterns with care
Tip #7 : instanceof is faster on classes
Tip #8 : Use synchronized minimally
Tip #9 : Beware external libraries
Posted by tuning-java
,

http://java.sun.com/performance/reference/whitepapers/tuning.html

썬에서 제공하는 자바 튜닝 whitepaper

물론 JVM 옵션 튜닝만 한다고 해서 답은 안나오겠지만,
튜닝할게 더이상 없다면, JVM 버젼 upgrade 및 옵션 튜닝을 해야 할 것이다.

아래는 이 글의 목차다.

뭐 다 읽기 귀찮으신 분들은 4.2 부터 적용해 보시면 된다.

1   Introduction

1.1   Goals
1.2   This is a Living Document
1.3   How to Use this White Paper

2   Best Practices

2.1   Use the most recent Java™ release
2.2   Get the latest Java™ update release
2.3   Insure your operating system patches are up-to-date
2.4   Eliminate variability

3   Making Decisions from Data

3.1   Beware of Microbenchmarks!
3.2   Use Statistics
3.3   Use a benchmark harness

4   Tuning Ideas

4.1   General Tuning Guidelines

4.1.1   Be Aware of Ergonomics Settings
4.1.2   Heap Sizing
4.1.3   Garbage Collector Policy
4.1.4   Other Tuning Parameters

4.2   Tuning Examples

4.2.1   Tuning Example 1: Tuning for Throughput
4.2.2   Tuning Example 2: Try the parallel old generation collector
4.2.3   Tuning Example 3: Try 256 MB pages
4.2.4   Tuning Example 4: Try -XX:+AggressiveOpts
4.2.5   Tuning Example 5: Try Biased Locking
4.2.6   Tuning Example 6: Tuning for low pause times and high throughput
4.2.7   Tuning Example 7: Try AggressiveOpts for low pause times and high throughput

5   Monitoring and Profiling

5.1   Monitoring
5.2   Profiling

6   Coding for Performance
7   Pointers
8   Feedback and the Java Performance Community

8.1   Feedback
8.2   Java Performance Community

Posted by tuning-java
,
http://dlc.sun.com/pdf/819-3681/819-3681.pdf

문서의 제목은 Sun Java SystemApplication Server 9.1 PerformanceTuning Guide라고 되어 있다.

하지만, 실제 내용은 특정 Application 서버에 한정된 내용이 아닌 범용적이고, 기본적인 이야기가 많이 정리되어 있다.

세부적인 내용은 아니더라도, 제목만이라도 읽어 놓으면 많은 도움이 될 듯 하다.

바로 다운로드 받기 귀찮은 분들은 아래의 내용을 펼쳐서 제목만이라도 읽어보기 바란다.

Posted by tuning-java
,
kenu님 미투데이에 놀러갔다가 ehcache 를 발견했다.

간단히 사용법을 정리한 블로그는 영어지만,
http://blog.cherouvim.com/caching-pages-using-ehcache


ehcache는 홈페이지에서 다운로드 가능하다.
http://ehcache.sourceforge.net 

왜 페이지 캐시가 필요한지는 대부분 아시겠지만,
예를 들어서 간단하게 말씀드리면...
온라인 쇼핑몰에서 대분류, 중분류, 소분류로 상품의 목록이 나오고
해당 상품의 개수가 나와있다고 가정해보자.
만약 이런 페이지의 캐시를 지정하지 않았다면, 페이지를 호출할 때마다 해당 카테고리의 상품 개수를 가져오는 쿼리가 계속 수행될 것이다.

그런데 캐시를 사용한다면???
거의 HTML을 읽어오는 속도로 메모리에서 데이터를 읽어 올 수 있으므로,
해당 화면이 엄청나게 자주 불리는 초기화면이거나 include되는 화면이라면 WAS 와 DB 사용량이 현저하게 줄어들 수 있다.
추가로 I/O 도 줄어들 수 있을 것이다.
Posted by tuning-java
,
제니퍼를 사용하다보면 X-View나 통계정보에 쿼리 목록이 안나올 때가 있다.

만약 DB의 Connection을 WAS에서 제공하는 것을 사용하지 않을 경우나,
다른 특이한 경우에 이런 일이 발생하게 된다.

그럴때에는 당황하지 말고, 다음과 같이 하면 된다.

1. 먼저 어떤 메소드에서 DB Connection을 맺는지 확인해야 한다.
제니퍼에 로긴하여
장애진단 - 유틸리티 - 로딩 클래스 목록을 찾아간다.
(만약 이 메뉴도 못찾아 가면 이 설명을 읽지 말기 바란다. ^^)

2. 로딩 클래스 목록중에서 DB와 연결을하는 getConnection 관련 메소드를 찾는다.
그 메소드의 매개변수까지 꼭 확인해야 한다.

3. w11.conf 나 w12.conf 와 같이 각 WAS 별 설정이 지정되어 있는 설정파일을 연다.
(제니퍼에서 관리도구를 통해서 설정하는 것이 더 낫다. 실시간으로 반영이 되기 때문에...)
거기서
jdbc_connection_get =
이라고 되어 있는 부분을 찾는다.
분명히 #으로 주석이 되어 있을 것이다.
그 주석을 풀고 저 설정값 뒷 부붓에 패키지를 포함하여 클래스와 메소드와 매개변수를 지정한다.
예를 들어 삼성 SDS의 Athena (지금은 Anyframe 인가??)를 사용할 경우에는 다음과 같이 지정하면 된다.

jdbc_connection_get = athena.titan.services.datasource.impl.AbstractDataSourceService.getConnection()
만약 매개변수의 타입이 String이면, ....getConnection(String) 과 같이 지정하면된다.

그리고 나서 conf 파일을 저장하거나 수정 버튼을 클릭해서 변경사항을 반영한다.

그래도 안되면, 제니퍼 소프트에 전화하세요~~~~ ㅋㅋㅋ

Posted by tuning-java
,

책이 나온지 거의 두달 되어가니 여러분들의 이야기들이 블로그에 올라와 있다.

좋은 리뷰도 있고, 좋지 않은 리뷰도 있네요. 모든 의견이 중요하다고 생각합니다.

단지, 이 책에서 부족하다고 생각들 하시는 튜닝의 기법이라든지, 툴에 대한 자세한 내용은 다음 책을 위해서 아껴 두었다고 너그럽게 생각해 주시면 감사하겠습니다.

이 책을 사려는 분들이나, 다양한 의견을 공유하시려는 분들은 아래의 링크를 클릭해 보시면 됩니다. ^^;

<<<<< Yes24 사이트의 주옥같은 리뷰들 보기 >>>>>

최종 update date : 2008. 05. 10.

Posted by tuning-java
,

참고로 이 설명은 [Blog2Book 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기] 책을 읽는 독자분들이 부록으로 제공되는 DevPartner for Java를 보다 쉽게 사용할 수 있도록 작성되었으며, 설치시 14일간 기능의 제한이 없는 임시 라이센스가 생성됩니다.


DevPartner의 화면에 대한 간단한 설명을 해 보고자 한다.
먼저 Welcome 화면이다.

그냥 별 내용은 없는데, 오른쪽에 Java Platform Performance 라는 링크를 누르면 자바의 성능에 대한 관련 책이 링크로 제공된다.

(인터넷이 되는 곳에서만 확인할 수 있다.
다음은 Application Testing 화면이다.

이 화면에서는 WAS 기반의 시스템이 아닌 단독 자바 애플리케이션을 테스트 할 때 사용된다.

이 화면을 사용하기 위해서는 DevPartner의 프로그램 그룹에 있는 Utility의 Administration 이라는 프로그램을 사용해야만 하는데, 나는 설정하기 귀찮아서 이 기능을 사용하지 않는다.

이번 화면은 Application Server Testing 화면이다.

관련 내용은 Application Testing 과 비슷하기 때문에 생략 하겠다.

이제부터 중요한 화면이다.

위의 화면은 Session Files 라는 화면인데, drop down 메뉴에 기본적으로 Default라고 나타날 것이다.
만약 여러분이 config를 다른 이름으로 지정한다면 그 이름도 여기에 나타날 것이다.
config 지정하는 것은 "WAS 모니터링 시작하기"편을 통해서 확인해 보기 바란다.

다음은 현재 프로파일링 중인 어플리케이션 세션의 목록을 보는 화면이다.

여기의 목록에서 프로파일링 중인 대상을 더블 클릭하면, 데이터를 수집할 수 있는 화면으로 이동한다.

마지막 화면은 설정하는 화면인데, 가장 중요한 화면중 하나이다.

이 내용은 영어를 읽으면서 하나 하나 설정해 보면 되는데, 만약 자세한 설명이 필요하다는 분들이 많다면,

자세한 설명을 나중에 추가하도록 하겠다.

Posted by tuning-java
,

참고로 이 설명은 [Blog2Book 자바 성능을 결정짓는 코딩 습관과 튜닝 이야기] 책을 읽는 독자분들이 부록으로 제공되는 DevPartner for Java를 보다 쉽게 사용할 수 있도록 작성되었으며, 설치시 14일간 기능의 제한이 없는 임시 라이센스가 생성됩니다.


DevPartner for Java (이하 DevPartner)를 윈도우즈 기반에서 설치하는 방법은 매우 간단하다.


DevPartner를 설치하기 위해서는 설치 디렉토리에 있는 Setup.exe 파일을 실행하면 다음과 같은 화면이 나타나고, 여기서 install Compuware DevPartner를 선택하면 된다.

기본적인 설치 방법은 여타 다른 툴들과 비슷하기 때문에 생략하고, 중간에 Integrate DevPartner Java Edition with your IDE 와 다른 옵션을 선택하는 부분이 있다. 다른 옵션은 선택하지 않는 것이 좋고, 만약에 eclipse와 같은 툴에서 사용하기 위해서는 Integrate... IDE를 체크하여 eclipse의 경로를 지정하면 된다.


모든 설치가 완료되면 "반드시" PC를 재기동 해야한다. 윈도우용 설치파일만 제공되기 때문에 Linux나 Unix에서 설치하는 방법에 대해서는 여기서 다루지 않겠다.


PC를 재기동 한 이후에 자동으로 DevPartner 초기화면이 기동될 것이다.


다음부터 이 초기화면으로 이동하기 위해서는 윈도우의 시작 -> 프로그램 -> Compuware DevPartner Java Edition -> DevPartner Java Edition을 선택하면 이 화면으로 이동할 수 있다.



이 화면이 정상적으로 나타난다면 제대로 설치가 된 것이다.

나는 그렇지 않은 경우가 없어서 그렇지 않은 경우에 어떻게 하냐고 물어보셔도 모르니 참조해 주기 바란다.

(기본적으로 자바가 설치 되어 있어야 하며, 현재 제공되는 프로그램의 경우에는 JDK 6.0이 지원되지 않는 것으로 알고 있다. 사용하려면 JDK 5.0을 설치하여 사용하기 바란다.)


첫 화면이 나타나면 눈치를 챈 분들도 있겠지만, 내부적으로 톰캣 서버를 기동하여 그 톰캣 서버에서 작업을 수행하는 구조로 되어 있다.


설치 단계의 마지막으로 한가지 팁을 알려드리면, 이 툴의 경우 관련된 서비스가 항상 실행되도록 되어 있기 때문에 해당 서비스를 자동이 아닌 수동으로 수행될 수 있도록 변경해 주어야만 한다.

윈도우 시작 -> 설정 -> 제어판 -> 관리도구 -> 서비스를 선택하면 아래와 같은 화면이 나타날 것이고, 여기서 잘 찾아보면 Compuware 어쩌구 저쩌구하는 것이 있는 것을 확인할 수 있다.


해당 줄을 더블클릭하면 다음과 같은 화면이 나타난다.

여기서 중간에 있는 자동을 수동으로 변경하고 확인을 누르면 이제부터 시작할때 마다 DevPartner가 시작되지 않는다.

Posted by tuning-java
,

프로파일링 툴을 사용할때,

프로파일한 결과파일의 명명규칙을 정하지 않으면,
나중에 결과정리할 때 곤혹을 치루게 된다.(다 열어봐야 하니까...)

그래서 아래와 같이 하시면 편리하고,
되도록이면 이 표준을 사용하는게 나을듯....

예) DevPartner사용시
01_Login_2nd_10Time.tts

가장 앞의 01은 프로파일한 순서 Login이 아닌 다른 menu를 선택하면 02가 된다.

그리고, 두번째는 해당 업무 명,
세번째는 해당 업무를 프로파일한 횟수(첫번째한건지, 두번째 한건지...)
마지막 10Time은 해당 화면을 10번 클릭한 것을 명시한 것이다.
이렇게 하면 파일명으로 sorting해도 나중에 보기 편리하다.
작업할때는 보통 Date로 sorting해서 작업하면 된다.(필요없는 파일을 삭제하기 위해서.)

Posted by tuning-java
,

http://www.ibm.com/developerworks/kr/library/j-jtp09275.html

IBM에서 작성한 성능과 관련된 문서.

Java의 성능과 관련된 내부 구성이 어떻게 되는지를 확인할 수 있는 좋은 문서

이 사이트는 한글로 구성되어 있기 때문에,

영어 울렁증이 있는 분들에게도 많은 도움이 될 것이다.

Posted by tuning-java
,
 
이 링크 따라 가면 Sun에서 발표한 자료들과
 
고민하고 있는 내용들을 알 수 있음.
Posted by tuning-java
,