J2EE 어플리케이션문제해결방법론 차의중 IBM Korea WebSphere Field Technical Sales Support ejcha@kr.ibm.com
선결조건
문제해결에임하는자세 3 침착하라 -심호흡 -Operating은천천히, 또박또박 혼자해결하려하지마라 -물어보라 -찾아보라 -확인하라 필요한최소한의인원만을곁에두어라 -파트별엔지니어, 어플리케이션개발자 메모하라 -시간, 행위 ( 자세히 )
대안의준비 4 기술적해결만이최선이아니다 -목표의선회, 업무적해결 넓게보라 -문제는어디서든일어날수있고, 누구든일으킬수있다 -정공법만이최선이아니다 단계별한계시간과향후전략을미리정해두라
문제의구체화
담당자의구체화 6 기술적담당자관리자 -어플리케이션, 시스템, 데이터베이스 개발자 -설계, 코딩 업무적담당자 -전체책임자, 어플리케이션책임자, 현업담당자 지원담당자솔류션판매자, 컨설턴트 -영업대표, 엔지니어 *** 그문제에대한담당자지정필요 ***
증상의구체화 7 ex) 느려진다 어디서측정했는가, 어느구간을측정했나, 뭘로측정했는가 얼마나느린가 ( 평소 X 초, 문제시 Y 초 ) Ex) 응답이없다 Ex) 죽는다 뭐가응답이없는가 ( 특정서비스, 어플리케이션, 서버, 데이터베이스, 시스템전체 ) 응답이아예없는건가, 너무느린건가 뭐가죽는가 (OS/ 프로세스 / 웹서버 /JVM/ 어플리케이션 ) 어떻게하고죽는가 ( 로그, Core dump, 특이증상없음 )
증상의구체화 (Cont.) 8 Ex) 이상하게동작한다정상일때는어떤가 / 지금은어떤가화면이전혀안보이나다른사람의데이터가나오나이상하게가공된데이터가나오나글자나이미지가깨졌나어느부분이이상한가전체가이상한가 / 특정부분이이상한가
시간의구체화 9 언제발생했는가 얼마나자주발생하는가 그때만되면발생하는가 증상이시간에따라변화하는가, 어떻게변화하는가 다른날과비교해서다른점이있는가 -코드, 설정, 환경, 사용자수, 특정작업의호출수사용자의성향, 데이터의양
조작사항의구체화 10 뭘어떻게했을때발생하는가 그렇게하기만하면발생하는가
변경사항의구체화 11 상황이변화되었나 어떤상황이변화되었나 - 사용자수, 특정작업의호출빈도, 사용자의성향, 데이터의양 손댔나누가손댔나뭘손댔나 -코드, 설정, 환경, 패치 어떻게손댔나 -추가, 삭제, 변경
로깅및모니터링
로깅및모니터링시유의점 13 장애전부터이미시작되었어야한다. -제품 Install 시부터시작되어야한다. WAS 뿐만아니라기타자원까지로깅 / 모니터링하라 -OS, Web Server, DB,Network,Firewall 충분히많은양을로깅 / 모니터링하라 -Stress Test시에 Disk Busy 가심하지않을정도 장애시점및그를약간전후한시간대의모든자원을의심하라
14 GUI 모니터링툴및분석툴 JVM, 컨테이너, OS 내자원의운용상황, 시간적변동상황, 다양한분석 모듈별응답시간, 스레드상태 Ex)WebSphere
로그파일 15 장애상황, 운영상황, 로직흐름, 장애지점, 장애내용, 기타런타임환경의상세내용 Ex)WebSphere SystemOut.log, SystemError.log, native.log, Access_log, error_log Core, java core <= 장애시점의메모리, 스레드상태 -http://www.javaservice.net
기타 16 OS 레벨자원운용상황 -topas, glance, vmstat - 특히, Memory 운용상황은 OS 레벨에서의측정치와 JVM 내부의실제운영치가다르므로반드시 JVM 레벨에서모니터링필요 특정포트간커넥션수실시간모니터링 -mon.sh ( 이원영 ) 현재구동중인웹페이지들보기 -requestmon.jsp JVM Heap 모니터링 -mem.jsp, m.jsp ( 이원영 ) http://www.javaservice.net
필수지식들
18 컴포넌트아키텍쳐 컴포넌트? 컨테이너의관리 / 도움하에서작업을수행하는사용자모듈 컨테이너? 컴포넌트의동작을관리하고도와주는엔진 ( 모듈들의집합 ) 모듈? 클래스 / 인터페이스 - in Java 컴포넌트컴포넌트 EIS EIS 컨테이너
J2EE 아키텍쳐 19 EIS
WAS 아키텍쳐 20 Ex)WebSphere V5
HTTP 요청의흐름 21 Ex)WebSphere V5 WebSphere Application Server Web server plugin listening HTTP port Thread Web container get Thread pool Worker Thread Util Servlet class User logic Transform/compile J D B C C x DB JSP
EJB 요청의흐름 (Remote home call) 22 WebSphere Application Server J Naming service Port get lookup Naming service ORB Port EJB container get listening Thread ORB Thread Tie Thread pool Home Impl Create find Call back D B C C x EJB class User logic DB stub remote interface stub Home interface 클라이언트
EJB 요청의흐름 (Remote EJB Call) 23 WebSphere Application Server EJB container J D B C C x DB ORB Thread Tie Bean Impl Business method Call back EJB class User logic stub Remote interface Businessmethod 클라이언트
JDBC 호출의흐름 Ex)WebSphere V5 24 Naming service DataSource Thread Connection pool User class Prepared statement J D B C C x DB Prepared statement cache Tx Mgr
자원의운용방식 - Pooling 25 Min size Max size EJB Instance pool Servlet thread pool, ORB thread pool Other parameters -Ex)WebSphere V5 -스레드비활동제한시간 -최대크기를초과한할당허용여부 JDBC Connection pool other parameters -Ex)WebSphere V5 -연결제한시간 -Reap 시간 -유효제한시간 -미사용제한시간 -제거정책
자원의운용방식 - Caching Ex)WebSphere V5 Hashtable Connection caching Prepared Statement caching Key Object Size 26 Data caching other parameters Ex)WebSphere -기본우선순위 - 디스크오프로드
27 자원의운용방식 - Transaction Global Transaction, Local Transaction Transaction aware object 의종류 -EJB, JDBC Connection : Transaction aware -Etc : Trasaction not aware XADataSource, Non-XA DataSource Resource Locking EJB Transaction Spec -EJB Transaction Attribute -Transaction Scope -Transaction Rollback condition -Transaction Isolation Level
Clustering 28 Ex)WebSphere V5 HTTP(s) Edge Component L4 Switch HTTP(s) HTTP Server Plugin HTTP Server Plugin Plugin HTTP Server HTTP(s) Web Web Container Web Container App Server Container App Server ORB App Server ORB ORB Java Client ORB IIOP EJB EJB Container App Server EJB Container Container App Server App Server DB
Http Session clustering 29 Ex)WebSphere V5 S.id- xxxxxxxxxx web server app server app server app server app server A B C D session cache session cache session cache session cache DB Database persistence database persistence Memory to Memory Replication S.id- xxxxxxxxxx web server S.id- xxxxxxxxxx web server app server app server app server app server A B C D session cache session cache session cache session cache app server app server app server app server A B C D session cache session cache session cache session cache Peer-to-Peer 방식 App svr App svr Client-Server 방식
Firewall 30
31 J2EE App = Java App J2EE 컨테이너, 컴포넌트, J2EE 어플리케이션은 JVM 위에서돌아가는하나의자바어플리케이션일뿐이다. JVM,JRE,JDK 에대한이해는 J2EE 컨테이너의동작을이해하는데있어서필수 -JVM 의확장옵션, GC 알고리즘등몇가지동작은 OS 별, 버전별로다르다.
32 J2EE App = Java App JVM 이하는일 Binary Code Analysis Heap, Stack 운영 Garbage Collection JVM 에의존적 (JVM 의기능을그대로이용 ) Binary Code Loading Object Loading, Linking 상당부분컨테이너에의존적 (ClassLoader Customizing)
JVM and J2EE 컨테이너 33 다음의조작을통해 JVM의런타임동작에영향을줄수있다. JVM에대한런타임파라메터추가 / 변경 JVM/JDK의버전변경 JDK의라이브러리변경 ( 디컴파일-> 변경-> 재컴파일 ) 및패치 컨테이너의기능, 성능, 안정성에영향
34 JVM and J2EE 컨테이너 JVM 런타임파라메터의추가 / 변경방법 컨테이너에종속적 툴을이용하는방법 환경변수나서버구동용쉘파일을직접수정 @REM set DEBUG=-Djava.compiler=NONE -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=7777 "%JAVA_HOME% bin java" %WAS_TRACE% %DEBUG% %CONSOLE_ENCODING% "%CLIENTSAS%" "- classpath" "%WAS_CLASSPATH%" "-Dws.ext.dirs=%WAS_EXT_DIRS%" %USER_INSTALL_PROP% "- Dwas.install.root=%WAS_HOME%" "com.ibm.ws.bootstrap.wslauncher" "com.ibm.ws.management.tools.wsserverlauncher" "%CONFIG_RO OT%" "%WAS_CELL%" "%WAS_NODE%" %*
35 기타 TCP/IP 이론 OS Memory, virtual memory 운용 UNIX Shell, Shell Script, DOS Script