Java2008. 5. 26. 15:50

1. Sun JDK

1) HPRof 사용

JDK 버전에 따라 JVM 옵션에 -Xrunhprof:heap=dump,format=b,doe=n (JDK 1.4) 또는 -agentlib:hprof=heap=dump,format=b,doe=n (JDK 1.5)을 명시하고, 실행시에 Control-break 또는 kill -3 <pid> 명령으로 heap dump를 생성할 수 있다. Windows 환경이라면 SendSignal.exe를 사용하면 된다.

하지만 오버헤드가 너무 커서 운영환경에서 사용하기에는 무리가 따른다. 이 옵션없이 JBoss를 기동하면 30초면 뜨는데, 옵션을 키면 무려 3분 30초가 걸렸다.

* 설정

- -Xrunhprof:heap=dump,format=b,doe=n (JDK 1.4)

- -agentlib:hprof=heap=dump,format=b,doe=n (JDK 1.5)

* heap dump 생성

- kill -3 <pid>

- SendSignal.exe <pid>

2) OutOfMemoryError 발생 시 자동으로 heap dump

JVM 옵션에 -XX:+HeapDumpOnOutOfMemoryError를 설정하면 OutOfMemoryError 발생 시에 heap dump를 현재 실행 디렉터리에 생성한다. JBoss의 경우는 $JBOSS_HOME/bin 디렉터리이다. heap dump가 생성되는 경로를 지정하려면 -XX:HeapDumpPath를 설정해준다.

Sun JDK 1.4.2_12, 1.5.0_7, 그리고 HP 1.4.2_11 이후 버전에서 지원된다.

* 설정

- -XX:+HeapDumpOnOutOfMemoryError

- -XX:HeapDumpPath=/path

* heap dump 생성

- OutOfMemoryError 발생시

3) SIGQUIT (kill -3 <pid>)

JVM 옵션에 -XX:HeapDumpOnCtrlBreak를 설정하면 SIGQUIT signal로 heap dump를 생성할 수 있다. JDK 1.5.0_14 부터지원된다. 하지만, Windows와 Linux 버전의 JDK 1.5.0_14는 버그로 인해 "/"가 포함된 파일명으로 heap dump를 생성하려고해 No such file or directory라는 에러를 내며 heap dump가 생성되지 않는다. Solaris 버전은 테스트를 못해봤는데 설마 동작하지 않을까 싶다.

* 설정

- -XX:HeapDumpOnCtrlBreak

* heap dump 생성

- kill -3 <pid>

- SendSignal.exe <pid>

4) jmap 사용(JDK 1.6이상)

별도로 JVM 옵션에 명시할 필요없이 JDK에 포함되어 있는 jmap을 사용해 heap dump를 생성할 수 있다. Windows 버전은 JDK 1.5 버전에 jmap이 포함되어 있지 않으므로 사용할 수 없다.

* heap dump 생성

- jmap -heap:format=b <pid> (JDK 1.5)

- jmap -dump:format=b,file=<filename> <pid> (JDK 6)

2. HP JDK

1) SIGQUIT (kill -3 <pid>)

HP의 경우 JVM 옵션에 -XX:+HeapDump를 설정해 SIGQUIT signal로 heap dump를 생성할 수 있다. 기본적으로 text 형식으로 저장되는데 binary 형식이 필요하면 _JAVA_BINARY_HEAPDUMP 환경변수를 설정하면 된다. 이 방법 외에도 Sun JDK처럼 -XX:+HeapDumpOnCtrlBreak를 설정하면 binary heap dump를 생성한다. JVM 옵션을 변경하기 싫으면 _JAVA_HEAPDUMP 환경변수를 설정해도 된다.

* 설정

- -XX:+HeapDump 또는 -XX:HeapDumpOnCtrlBreak

- export _JAVA_HEAPDUMP=1

* heap dump 생성

- kill -3 <pid>

2) OutOfMemoryError 발생 시 자동으로 heap dump 생성

Sun JDK처럼 JVM 옵션에 -XX:+HeapDumpOnOutOfMemoryError를 설정하면 OutOfMemoryError 발생 시에 heap dump를 현재 실행 디렉터리에 생성한다.

참고자료

http://java.sun.com/javase/6/webnotes/trouble/other/troubleshooting-j2se5.html

http://java.sun.com/javase/6/webnotes/trouble/

http://docs.hp.com/en/5992-1918/ch01s27.html

http://www.latenighthacking.com/projects/2003/sendSignal/

http://forum.java.sun.com/thread.jspa?threadID=681590&messageID=3975318

http://blogs.sun.com/alanb/entry/heap_dumps_are_back_with

[출처] Heap Dump 생성|작성자 소프

Posted by la30321
Java2008. 5. 9. 15:32

1. 웹(MVC)프레임워크: - Struts, Spring, WebWork
- Ruby on Rails (php)
- Velocity
- FreeMaker
- Turbine

2.Persistent/ORM 프레임워크
- iBATIS, Hibernate

3. Configuration 프레임워크
- Obix, kilim

4.테스팅 프레임워크
- JUnit, CUnit

5. 로깅 프레임워크
- Log4J

6.보안 프레임워크(공개)
- Acegi Security

7.종합/통합 프레임워크
- JBOSS

8.지원프레임워크
- CVS, SVN, ANT

개발자가 알아야 할 필수 유틸(프레임워크)
- Eclipse
- CVS(SVN)
- ANT
- JUnit
- Log4J

좋은 프레임워크의 조건
- 꾸준한 지원. (JDOM, 삭제됨)
- 확장성이 좋을것
- 사용하기 쉬울것
- 플랫폼으로 부터 독립성지원
- 자료풍부

Posted by la30321
Web_HTML2008. 5. 9. 15:23

<!-- 이미지 사진 보기(시작) -->
<script language=javascript>
<!--
function Imgview() {
document.all.tempImg.src = "";
document.all.tempImg.src = document.<%=frmbase%>.fileName.value;
}

var stateFlag = 0;
thumbnail = new Image;

function checkImgFormat(imgPath){
if ( imgPath.indexOf(".JPG") != -1 ||
imgPath.indexOf(".jpg") != -1 ) {
stateFlag = 1;
document.previewImg.src = imgPath;
}else{
stateFlag = 0;
if ( imgPath != "" )
alert("이미지 파일(.jpg) 파일이 아닙니다.");
}
}

function showImg( img_url ){
thumbnail.src = img_url;
newSize = ( 136/136 > thumbnail.width/thumbnail.height ) ? 136 / thumbnail.height : 136 / thumbnail.width;
newWidth = thumbnail.width * newSize;
chksize( img_url );
if ( thumbnail.width > newWidth )
document.previewImg.width = newWidth;
else
document.previewImg.width = thumbnail.width;
}


//이미지 사이즈가 보여질 테이블의 가로 크기보다 큰가
function chksize( img ){
var temp;
//업로드 후 이미지를 모여줄 테이블의 가로 크기
//보기 좋은 사이즈로 수정해주세요
//전체 보기를 위한 Anchor가 걸립니다.
var chk_size = 130;
temp = new Image();
temp.src=img;

if( temp.width > chk_size ){
changeSize( temp, chk_size );
}
}

function changeSize( img, val ){
// var hei=Math.round( img.height*(val/(img.width) ) );
var hei=500;
var wid=val

}

-->
</script>
<!-- 이미지 사진 보기(끝) -->

<body>

--------- 중 략 ----------

<table width="810" height="43" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="right">
<img src="/images/btn_plus.gif" width="52" height="22" style="cursor:hand" onClick="fUsrAction('add');"></td>
</tr>
</table></td>
</tr>
</table>
<div id="jack" style="DISPLAY: none">
<img src="" id="tempImg">
</div>
</form>

</body>

</html>

출처 : http://blog.naver.com/promature.do?Redirect=Log&logNo=20015152593

Posted by la30321
Web_HTML2008. 5. 9. 15:19

<script language="javascript">
/*
' ------------------------------------------------------------------
' Function : f_add_file()
' Description : tr을 하나생성하고 첨부파일을 추가한다.
' Argument :
' Return :
' ------------------------------------------------------------------
*/
function f_add_file()
{
var lo_table = document.getElementById("tbl_attach"); // 테이블지정
var li_rows = lo_table.rows.length; // 테이블 row 개수(Tr의 개수
var lo_tbody = lo_table.childNodes[0]; // table의 첫번째 차일드 즉 tbody를 지정한다.
var lo_row,lo_cell;

lo_row = document.createElement("TR"); // Tr을 하나 생성한다.
lo_tbody.appendChild(lo_row); // tbody에 자식노드를 하나 추가한다.
lo_cell = document.createElement("TD"); // Td를 생성한다.
lo_row.appendChild(lo_cell); // Tr에 td를 하나 추가한다.
lo_cell.innerHTML = "<input type=\"text" name=\"file_" + (li_rows+1) + "\">"; // 고유이름지정

// 몇개의 폼을 전송하는지 카운트를 넣어준다.
frm_upload.hid_count.value = li_rows+1;
}

/*
' ------------------------------------------------------------------
' Function : f_add_file()
' Description : 테이블의 row를 삭제한다. tr이 하나도 존재하지 않으면
' 삭제하지 않는다.
' Argument :
' Return :
' ------------------------------------------------------------------
*/
function f_del_file()
{
var lo_table = document.getElementById("tbl_attach"); // 테이블지정
var li_rows = lo_table.rows.length; // 테이블 row 개수(Tr의 개수)
var li_row_index = li_rows -1; // 테이블 row 즉 Tr의 고유 인덱스를 지정함

// tr이 하나도 없을때는 삭제하지 않는다.
if(li_row_index >= 0)
{
lo_table.deleteRow(li_row_index);
}
}
</script>

<form name="frm_upload" method="post" enctype="multipart/form-data">
<input type="hidden" name="hid_count">
<table>
<tr>
<td valign="top">
<!-- 추가 삭제버튼 -->
<img src="btn_add.gif" align="absmiddle" border="0" style="cursor:hand;" onclick="f_del_file();">
<img src="btn_del.gif" align="absmiddle" border="0" style="cursor:hand;" onclick="f_add_file();">
</td>
<td valign="top">
<!-- 첨부파일 추가공간 -->
<table id="tbl_attach">
</table>
</td>
</tr>
</table>
</form>

Posted by la30321
Web_HTML2008. 5. 9. 15:15

Calender Ajax JavaScript

http://www.dynarch.com/

생각보다 깔금하고 좋다.

Posted by la30321