SVN에서 Commit 실행후 프로그레스가 99%에서 멈쳐 강제종료하였더니 lock 걸렸다.
다시 Commit 시도하였으나 이미 locked
Team → Cleanup 실행 하여 조치
org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked dir
svn: Working copy 'XXXXXX' locked
org.tigris.subversion.svnclientadapter.SVNClientException: org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked dir
svn: Working copy 'XXXXXX' locked
at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.update(AbstractJhlClientAdapter.java:1010)
at org.tigris.subversion.subclipse.core.commands.UpdateResourcesCommand.run(UpdateResourcesCommand.java:68)
at org.tigris.subversion.subclipse.ui.operations.UpdateOperation.execute(UpdateOperation.java:73)
at org.tigris.subversion.subclipse.ui.operations.RepositoryProviderOperation.execute(RepositoryProviderOperation.java:71)
at org.tigris.subversion.subclipse.ui.operations.SVNOperation.run(SVNOperation.java:89)
at org.eclipse.team.internal.ui.actions.JobRunnableContext.run(JobRunnableContext.java:144)
at org.eclipse.team.internal.ui.actions.JobRunnableContext$ResourceJob.runInWorkspace(JobRunnableContext.java:72)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked dir
svn: Working copy 'XXXXXX' locked
at org.tigris.subversion.javahl.SVNClient.update(Native Method)
at org.tigris.subversion.javahl.SVNClient.update(SVNClient.java:491)
at org.tigris.subversion.svnclientadapter.javahl.AbstractJhlClientAdapter.update(AbstractJhlClientAdapter.java:1006)
... 8 more
- Method Area : 메소드와 클래스 변수를 저장하기 위한 공간, 모든 프로그램에 의해 공유.
- Heap Area : 사용자가 생성하는 Java Object들이 저장되는 공간, 동적으로 할당하여 사용되어짐.
- Stack Area : 메소드 호출시 해당 메소드의 매개변수, 지역변수, 임시변수 등을 저장하기 위한 Stack 구조의 메모리.
- Native Heap Area : Java Object가 아닌 Native Object들이 거주하는 공간. OS 차원에서 결정.
- Permanent Space : Class에 대한 Meta 정보를 저장하는 공간. (Permanent Space는 Java Heap의 하위 영역)
* Java 실행 Option
1. -X Option(모든 VM에서 동작하지 않을 수 있는 비표준 option이며, 버젼별로 언급없이 변경되어질 수 있음)
-Xms : 초기 Heap size 설정
-Xmx : 최대 Heap size 설정
-Xss : 각 Thread에 할당되는 Stack size 설정
-Xmn : New 영역을 위한 Heap size 설정
2. -XX Option (올바른 동작을 위해 특정한 시스템 요구사항들이 있으며, 시스템 설정 파라미터에 대한 접근 권한이 요구됨)
-XX:PermSize : 초기 Permanent size 설정
-XX:MaxPermSize : 최대 Permanent size 설정
1. Heap Area Exception in thread "main": java.lang.OutOfMemoryError: Java heap space
Exception in thread main: java.lang.OutOfMemoryError: Requested array size exceeds VM limit
원인 : Heap size의 부족으로 Java Object를 생성하지 못하여 발생
해결 : 1. -Xmx Option을 이용하여 최대 Heap size의 크기를 늘려줌
2. Application 로직이 잘못되었거나 JDK나 WAS의 Bug로 인한 Memory 누수가 있는지 확인하여 수정
3. finalize method에 의해 즉각적인 GC가 이루어지지 않으므로 로직 수정을 통해 해결
2. Permanent Space Exception in thread "main": java.lang.OutOfMemoryError: Perm Gen space'
원인 : Permanent 저장 공간이 부족하여 발생.
JSP -> Servlet 변환, Reflection을 사용하여 동적으로 로딩되는 Class가 많은 경우에 발생할 수 있으며,
WAS의 Class Reloading 기능이 자주 실행 될 경우에도 발생할 수 있음.
해결 : -XX:PermSize, -XX:MaxPermSize Option을 이용하여 크기를 늘려줌
※ Class Loading Monitoring
java 실행시 -verbose:gc을 사용하여 Class가 Loading 되는 것을 Monitoring
3. Native Heap Area java.lang.OutOfMemoryError: request bytes for . Out of swap space?
java.lang.OutOfMemoryError: (Native method)'
java.lang.OutOfMemoryError: unable to create new native thread
원인 : Native Heap memory가 부족하여 발생
해결 : 1. Physical memory를 초과할 경우 Virtual Memory를 요청하여 필요한 메모리를 확보하게 되는데,
이 과정에서 오류가 발생할 경우 OS가 제공하는 툴을 통해 이를 모니터링 하고
이 공간 자체가 부족할 경우 크기를 늘려줌
2. -Xmx Option을 이용하여 Heap Area 공간을 줄이고 Native Heap Area 공간을 늘림
3. Thread Stack Space가 부족한 경우 Thread의 수를 줄이거나,
-Xss Option을 통해 Thread별 Stack Size를 줄여줌
(단, Thread별 Stack Size를 과도하게 줄였을 경우 Stack Overflow Error가 발생할 수 있음)
"jakarta-taglibs\standard\lib"폴더안에 있는 'jstl.jar', 'standard.jar'파일을
"C:\tomcat\common\lib" 폴더로 복사합니다.
▩ Core Tag
기능 태그명 기능설명 --------------------------------------------------------------------------- 변수 지원 set jsp에서 사용될 변수를 설정합니다. remove 설정한 변수를 제거합니다. --------------------------------------------------------------------------- 흐름 제어 if 조건에 따라 내부 코드를 수행합니다. choose 다중 조건을 처리할 때 사용됩니다. forEach Collection의 각 항목을 처리할 때 사용합니다. forTokens 구분자로 분리된 각각의 토큰을 처리할 때 사용합니다. --------------------------------------------------------------------------- URL 처리 import URL을 사용하여 다른 자원의 결과를 삽입합니다. redirect 지정한 경로로 이동합니다. url URL을 재 작성합니다. --------------------------------------------------------------------------- 기타 태그 catch 예외 처리에 사용합니다. out jspWriter에 내용을 알맞게 처리한 후 출력합니다. ---------------------------------------------------------------------------