목록문제 (5)
행복한 아빠
운영 서버에 문제가 발생했습니다. 어떤 요청이 문제를 일으키는 것 같습니다. 이런 경우 여러 가지 방법으로 모니터링을 합니다. 그 중 쓰레드 덤프를 뜨는 경우도 많습니다. 쓰레드 덤프 뜨고 분석하려면 JVM 프로세스에 SIGQUIT 시그널주고 로그 받아와서 사무라이 같은 걸로 분석하고 합니다. (JVM hang 걸렸을 때 thread dump 남기는 법) 계속 이런 식으로 하기 너무 귀찮아서 쉽게 쓰레드 덤프 보는 JSP 만들었습니다. 저처럼 이런 걸로 수고하시는 분들과 공유합니다. (이미지출처) 설치 모니터링 하는 거 하나 설치하려면 대부분 복잡합니다. 저는 이런 거 싫어서 그냥 JSP로 만들었습니다.(날코딩) 그냥 아래 threaddump.jsp를 다운받아 web app에 JSP 실행할 수 있는 디렉..
0. 지혜롭게 살자 많은 개발자가 전통적(?)인 방법인 System.out....로 디버깅을 많이 하고 있다. 물론 이것처럼 확실한 방법도 없지만 eclipse나 다른 IDE의 디버그 기능을 이용하면 훨씬 빨리 문제를 찾을 수 있다. 특히 WAS에 배포된 환경에서 이런 방법으로 하려면 확인하기 위한 System.out...을 고칠 때마다 배포해야 하는데 이건 너무 고통스러운 작업이다. 단위 테스트시 에러가 발생했을 때는 eclipse등을 이용해서 디버깅하기가 수월하다. 그러나 WAS에 배포된 후에 에러가 발생했을 때는 약간의 작업이 필요하다. WAS를 eclipse에 embeded한 플러그인을 이용하는 방법도 있지만 WAS와 이클립스를 따로 띄워 원격으로 버그를 찾는 방법을 정리한다. 이럴 경우 서버환경..

개발 중 가끔 클래스를 수정해서 올렸는데 계속 적용이 되지 않는 경우가 있습니다. 그래서 계속 수정해서 올리고 변경이 안되어 쓸데없는 시간을 보내곤 합니다. 여기에서는 지금 구동 중인 java 클래스가 어디에서 로드되는지 알아내는 방법을 소개합니다. 사전지식 JVM의 Classloader 구조를 정확히 이해하고 클래스가 어디에서 어떻게 로드되어 구동되는지 알아야 합니다. 일반적으로 JVM의 클래스로더는 계층(hierarchy)구조를 가지고 있으며 각 클래스 로더는 하나의 부모 클래스 로더를 갖습니다. (물론 루트: boot classloader 제외) 다음은 Tomcat의 클래스로더 구조입니다. (WAS 마다 조금씩 다르지만 거의 비슷합니다.) 클래스 로더의 규칙은 다음과 같습니다. 클래스 로더는 동일한..
예전에 Javascript와 Flex를 external interface를 이용하여 연계하는 방법을 소개했습니다. (Flex 차트와 Javascript 연결) 이 방법을 사용하면 Flex 차트를 웹 컴포넌트로 사용하고 대부분을 javascript로 화면을 구성할 수 있어 한 번 작성한 Flex 차트를 여러 모로 활용할 수 있는 장점이 있습니다. 즉 Flex 차트는 오직 차트 기능만을 제공하고 그 외 로직은 외부(javascript)로 분리하는 방법이죠. 문제점 이런 방법을 사용하면 동기화 문제가 발생합니다. 즉 다음과 같은 상황이 발생할 수 있습니다. 위 그림이 이것이 동작하는 방식인데 Javascript의 호출이 너무 빨라 Flex 차트가 로딩되기 전에 3번 흐름이 먼저되는 경우가 발생할 수 있습니다...
상황 jetty에 다음과 같은 설정으로 oracle datasource를 설정할 경우 java:OracleDS jdbc:oracle:thin:@192.168.10.136:1521:XE devora devora 아래와 같은 에러가 발생할 수 있다. 2007-11-15 18:50:04.740::WARN: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean w ith name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method fa iled; nested except..