JBoss EAP 7 (이하 EAP7)이 나온지도 몇개월이 되었고 (2016년 Q3)
아직 시장에 많이 풀리지는 않았고
패치도 열심히 올라오는 중임
이번에 바뀐 부분중에서 핵심(?)적이라고 할만한 부분을 말해보자면
서블릿 컨테이너를 전면 교체 하면서
요청을 받아들이는 Connector 부분과
WAS의 실질적인 요청처리 작업을 하는 Thread의 구조 및 Pooling 방법이 변경되었다
먼저 톰켓(tomcat)과 같이 설명을 하자면
EAP6까지는 Listener(Connector), Thread Pool, servlet 처리 부분을 Tomcat으로 처리해왔다
실제 tomcat 소스를 임포트 해서 개발했다고 보면 무방하다
그러다보니 tomcat tuning 포인트와 같이 생각하면 됬다.
대표적으로 Production에 적용한 tomcat 에서 기본적으로 검토해야하는
Pure java가 아닌 tomcat Native 를 사용하듯이 (APRConnector)
(BIO-blocking , NIO-non blocking JAVA Connector ,
APR-Apache Potable Runtime Native)
EAP에서는 이미 컴파일 된 Native Module을 제공하였고
Thread처리도 기본이 아니라 Executor thread Pool을 별도로 생성하여
tomcat 내부 Thread와 사용자 처리 Thread를 분리 하여 동작하도록 튜닝했다.
(안정성 개선 등)
EAP7에서는 tomcat의 이부분(서블릿컨테이너라도 통칭)을 걷어내고
경량 서블릿컨테이너인 언더토우(Undertow)로 변경되면서
서블릿 처리를 수행하는 컨테이너를 포함하여
앞서 말한 Connector 처리와 Thread Model이 변경되었다
이렇게 변경된 이유를 추측(!) 해보면
JVM의 Native 성능에 대한 신뢰가 어느정도 올라간것이 아닌가 하는 생각이다
기존에도 NIO(New IO)라고 해서 JAVA에서도 native 통신성능을 개선한 JAVA API를 제공하였으나
API 편의성이 그다지 좋지 못하고
그냥 추론에 성능이 그리 훌륭하지 못하고 안정성에 대한 신뢰 문제.... (가 있다는것이 아니라 C로 개발된 Native에 비하여) 등의 고민때문에
별도의 native module을 개발하여 제공하였다 ( 확장자 so 파일)
하지만 아무래도 별도의 모듈 개발에 필요한 공수도 감안하고
JVM의 NIO의 개선을 목적으로 XNIO (http://xnio.jboss.org/) 프로젝트가 진행되었고
이 Xnio를 기반으로 Undertow(http://undertow.io)가 개발되었으며
EAP7 에서는 이 부분을 신규로 적용한 것이다.
그럼 XNIO 기반의 Undetow를 적용함으로써 실제 좋아지는게 뭐냐?
니들끼리 바꿨다고 자축해봐야 나하고 뭔 상관이냐고....
라기 보다는
노가다 뛰는 엔지니어 입장에서 보면 다음과 같은 개선사항이 있다
1. Native 추가적인 설치가 필요없다
기본 Pure JAVA 기반의 WAS를 Native로 동작하게 하기 위해서는 별도의 Lib 모듈이 필요하며 tomcat의 경우 별도의 모듈 생성을 위하여 gcc를 사용하여 컴파일 하는 작업.....(아...구차나...안되면 골때리고...생성되도 운영시 문제발생시 해결방법이 없다)
JVM의 NIO를 기반으로 하는 XNIO를 사용하여 Connector 와 Buffer를 처리함으로써 JVM만 있으면 별도의 라이브러리가 필요없다.
설치가 단순해 진다.
2. Connector(Listener)의 단순화
EAP5를 구동하면 WAS 하나에 엄청나게 많은 Listen Port가 열렸다.
별별 다른 APP들과 충돌이 나고
포트 번호 하나 바꾸는데 진이 빠질 정도였던 환경에서
EAP6로 가면서 일부 최적화가 되었으나
tomcat Connector는 Multiplexer(MUX) 기능(1개 포트로 여러 프로토콜통신수행)을 구현할 수 없었기 때문에 어쩔 수 없이 다수의 Listen port가 사용되었다.
(예를 들어 관리용 Native Port 9999, EJB용, 기타 등등)
EAP7에서는 XNIO의 MUX기능을 사용할 수 있게 되었고 이를 통하여 Port를 통합함으로써 점유하는 Port 수를 획기적으로 줄였다
(관리용 Port 9999 하나로 EJB, JMX 등 여러 서비스를 동시 제공, HTTP 8080 포트하나로 HTTP2.0 프로토콜 동시제공)
3. Direct Buffer 사용
성능과 큰 관계가 있는 부분으로 기존에는 사용자 요청을 받으면 JVM 내부 Heap 영역의 일부를 Buffer로 지정하여 해당 영역에 저장하여 처리 하였으며 이 버퍼는 Blocking 모드로 동작했다(JVM의 내부는 무조건 Blocking Thread 모델이다...태생이 그렇다.
(Native 모듈설치한 WAS나 NIO 빼고)
EAP7 부터는 XNIO를 사용하여 JVM 외부 메모리 영역(Native Memory) 즉 Process의 메모리 영역에 접근할 수 있게 되어 non blocking으로 메모리에 저장함으로써 Buffer 처리 능력을 획기적으로 상승시킨다.
(솔까말 Native Module 설치한 WAS와는 비교하면 그놈이 그놈)
4. IO thread 별도로 추가됨
위에서 말한 MUX에 들어오는 요청은 기존에는 WAS Thread와 1:1 매칭 되는 구조였으나
이제 부터는 별도의 IO Thread가 Listener로 들어온 요청을 non blocking으로 읽어서 direct buffer에 저장하게 되므로 Rush 성 요청에 대한 대응능력이 개선됬을 것으로 보인다.
무슨말이냐...
요청이 엄청나게 밀려드는 웹사이트에서 JVM이 그러한 요청처리를 하기 위해서는 Kernel과 통신하여 요청을 처리해야 하고 이때 Blocking이 걸린다.
만약 JVM이 처리하는 속도 보다 요청이 더 빠르게 유입된다면
요청은 큐에 쌓이다가 결국 튕겨져 나가는 현상이 발생할 수 있다.
느린 (blocking thread) JVM Thread는 기존과 같이 working thread로 사용하지만
그 앞단에 Non blocking Thread를 별도로 두어서
들어오는 요청을 빠르게 수용할 수 있도록 변경함으로써
일단 들어오는 요청은 최대한 빨리 내부로 진입 시킬 수 있도록 개선되었다는 이야기.....
(아...씨바...머이리 복잡해.....)
이러한 구조는
대형 사이트에서 사용되던 상용 Product 에 이미 적용되곤 했던 검증된 구조로써
대표적으로 Iplanet Web Server(Sun One Web Server, Oracle iplanet webserver)에 적용되어
뛰어난 성능과 안정성을 자랑했다.
5. Worker(Working Thread Pool) 가 추가 되었다.
IO Thread가 단순히 요청을 빠르게 읽어들어 뒷단으로 저장하는 기능을 담당(Non Blocking)한다면
Working Thread는 실제 처리를 수행하는 (파싱하고..적달한 엔진으로 넘기고...대답하고)하는 역할(Blocking)을 수행한다.
기존의 Executor Thread Pool 이라고 불리던 Thread Pool이
Worker 라는 이름으로 변경되었다고 보면 된다.
사실 Thread Pool이야 원래 있던 내용이지만
이전까지 직접 config 파일을 열어서 추가하고
connector와 연결하는 작업을 해야 했던 터라
구조를 이해 하지 못하고 작업 해서는 잘 되지 않고
잘못넣으며 문제를 일으키기 십상...
이러한 부분을 CLI 및 GUI로 통합하여 구성 할 수 있도록 해서
Pool 관리가 월등히 편리해 졌다.
그럼 사용자 입장에서는 뭐가 좋아졌을까?
일단 성능이 좋아졌을 것으로 기대(?) 하고 있다.
본인이 직접 BMT를 해보지 못해서 딱 그렇다고 는 못하겠지만
EAP7이 안정화 되면 기존 버젼보다는 안정성 및 성능면에서 상당한 개선이 기대 된다.
뭐...WAS가 다 그놈이 그놈이지...
내가 운영하는 사이트가 최소한 동시접속이 수천~만 까지 되는것이 아니라면
솔직히 직업 운영할 능력 되면 tomcat도 좋고 Resin도 좋다 그 단순함의 미학....
하지만 아무래도 대용량 접속이 고려 되는 사이트이거나
자체적인 운영 능력이 낮은 조직라면
이제와서 WAS BMT 하자는건 너무 오바고
(올해 2017년이다.
WAS BMT가 웬 말이냐 이미 시장에서 검증된것 좀 믿어라...
김태희 예쁜걸 꼭 같이 살아봐야 알겠냐... 믿어라)
되도록 상용 WAS를 권하고 싶다.
.이상
2017년 1월 4일 수요일
2016년 12월 17일 토요일
2016년 12월 A형 독감
패북에 올렸다가 좀 더 정리해서 블로그로 넘겨봄...
먼저 참고하실부분
질본 - 인플루엔자 유행 빨라, 아동 및 청소년 주의 당부
질본 - AI 바로알기 (메르스와 별반 안다름...닭오리 만지지 말라고 함)
질본-AI 위기단계 격상(경계→심각)에 따른 인체감염 예방 대응 강화
http://www.cdc.go.kr/CDC/notice/CdcKrIntro0201.jsp?menuIds=HOME001-MNU1154-MNU0005-MNU0011&cid=72354
신종플루 (H1N1)
소독제와 신종플루에 대한 글
마스크의 구분
.그저 계란값 올랐다고 투덜거릴상황이 아니라고 봅니다.
정부발표를 잘 들어보면
...DNA지문분석 결과 기존 H5N6의 유전적 변이가 차이가 없어 인체감염 위험은 크지 않다...
라는 모호한 이야기를 합니다
즉 원래 H5N6 수준이라는 말이겠죠 (우리나라에서 이러한 타입의 AI 창궐은 처음입니다.)
이전에 우리가 아는 소위 신종플루 H1N1과는 다릅니다 (인플루엔자의 또다른 변종입니다.)
인체감염이 가능한 AI(조류독감)라는것을 두루뭉실 표현해서 슬쩍 넘어갑니다
"이건
내가 말안한것도 아니고
그렇다고 한것도 아니야
만약 AI가 인체감염으로 확산되더라도
우린 할만큼 했다고?"
뭔 이런짓거리를 하는거죠
메르스이후에도 하나 변함이 없습니다.
음모론이니 허위사실이라고 하셔도 좋습니다
일단 H5N6는 헤마글루티닌 의 H 와 뉴라민데이즈 N의 항원특성에 따라 서브타입으로 이름을 정하는데...(저도 대충 공부한거라 잘몰라요)
퉁 쳐서 이 복잡한 서브타입의 근간은 인플루엔자 A형 바이러스의 서브타입들 입니다.
=========== 여기까지는가금류에 대한 독감 이야기고........ ======
요즘 10 명중 1명이 독감이라고하죠?
질병관리본부의 공지를 참고하면 H3N2형으로 일명 홍콩 독감이라고 합니다.
"최근 실험실 감시를 통해 확인된 인플루엔자 바이러스는 총 86건이고,
모두 A(H3N2)형으로 유전자 분석 결과 백신주*와 항원성이 유사하다고 밝혔다.
* 올해 예방백신에 포함된 A/Hong Kong/4801/2014(H3N2)-like virus와 유사 "
아래 블로그에서 좀더 상세한 내용이 있으니 참고하십시요
오늘 YTN에서 지금이라도 독감주사를 맞으라며 지금 유행하는 독감은 "A형 독감" 이라고 합니다
(시청자가 의료전문가라 생각하는걸까?)
독감을 정의하면 인플루엔자 바이러스에 걸렸을때 독감이라고 합니다
(리노 코로나 바이러스는 일반 감기)
물론 그냥 인플루엔자 "A형 독감"이라고 하니 사람들이 아... 그냥 독한감기? 하나봅니다
오늘은 독감일 수도 있는 직원분을 일이 급하다는 이유로
수백명이 근무하는 회사에 불러서 일을 시키더군요
미친거라고 봐요 정부에서 말도 안하고 있지만
A형 독감이라고 하면
최소 이전 신종플루로 개고생했던 그때를 떠올려야하는데
사람들의 무지에 답답할 나름입니다.
이 무능한정부는 역시나 닭 오리 매몰하는 이야기나 하고있지
최근 독감(조류와 인간들의)에 대한 상세 대비책이나 가이드라인 하나 말하지 않고 있습니다
(질본 홈페이지에 공지사항에 올라오기는 합니다만 이건 뭐 면피용이지)
임산부 아이들 노인은 되도록 사람이 모이는곳은 가지 마시고
가실때는 마스크착용 기본입니다
일반 마스크는 기분상 입니다. N95등급으로 하시고
내가 감기기운이 없다면 밸브가 달린것도 좋으나
(방어목적)
내가 감기라면 꼭 N95 마스크를 착용해야
나도 피하고 혹시라도 타인에게도 피해를 안줍니다
집에오시면 꼭 손씼으시고 소독젤도 권장됩니다
감기기운 있으시면 수건등 가족과 별도 위생관리하시고
갑자기 38도 이상의 고열과 복통이 오거나 일주일 이상 감기증상이 길어지면 독감검사 받으세요
이 미친 정권은 또한번 국민들의 목숨으로 게임을 하는 것일지도 모릅니다
====== 종합해서.....=========
중국에서 17명 감염 10명 사망의 전적을 가진 H5N6 는
인체 감염이 가능하고 현 전국적으로 확산된 상태이고
1968년 홍콩에서 확인되어 100만명을 죽이고 WHO가 판데믹을 선언하게한 H3N2는
학교와 어린이집등 확산일로 입니다.
물론 그때보다 위생환경이나 대응체계는 개선 되었으나
지금 처럼 그냥 감기인냥 대충 지내다가
대량 감염상태가 되는 날에는 어마어마한 사건이 될 수 있습니다.
토요일 집회에는 아이들은 집에 두시고
마스크와 따뜻한 복장으로 뵙도록 하지요......
한겨울이 찾아왔습니다. 봄까지 살아남아야 벛꽃 대선을 할 수 있겠습니다.
이만.....
2016년 11월 12일 토요일
2016년 9월 9일 금요일
TDA(ThreadDumpAnalyzer) stack file fix header
Update 2018
https://github.com/irockel/tda
에서 2016년 2.3 버젼을 받으면 아래와 같은 노가다를 하지 않아도 된다.
2.2버젼을 6년째 쓰고 있었다..... 개발자가 손땠다고 읽고나서 없어졌다고만 생각하고 6년을....
하....
========================
TDA로 stack dump 읽어들일때
numberformat Exception이 발생하면서 화면깨지고 난리남
stack header가 TDA가 읽어들이는것 과 맞지 않아서 발생함..
TDA가 좋기는 한데..... 마지막 버젼이 2.2 5년전에 마지막 버젼 릴리즈
#공짜로쓰면서말많으면안됨
여하간 포멧을 정리해 줘야한다.
sed -i 's/prio=[0-9]\{1,2\} os_prio=-\?[0-9]\{1,2\}/prio=5/g' <FILENAME>
해주면 조정가능함
쉘로 만들꺼면 뭐 대충 이렇게
cat tda_format.sh
#! /bin/sh
FILE_NAME=$1
sed -i 's/prio=[0-9]\{1,2\} os_prio=-\?[0-9]\{1,2\}/prio=5/g' $FILE_NAME
#삽질의왕국
https://github.com/irockel/tda
에서 2016년 2.3 버젼을 받으면 아래와 같은 노가다를 하지 않아도 된다.
2.2버젼을 6년째 쓰고 있었다..... 개발자가 손땠다고 읽고나서 없어졌다고만 생각하고 6년을....
하....
========================
#삽질의왕국
2016년 7월 30일 토요일
인간적으로다가 말이지 ....
거실등도 나가고 뭐도 사고 뭐도 사고 해야 하고
얼마전부터 정우형이 인간적으로다가 쿠폰도 준다길래
(아는 사람은 안다 점점 VVIP지원이 없어지더니 요즘은 걸래취급을 하고 있었다는...
29만원어치에 5만원이 안되는 쿠폰적용가는 뭐야.... |
제품을 바꿔보고... |
단품 비싼거도 넣어보고 |
이래저래 넣어보고.... |
씨바...인간적이야...산소포화도 측정기 넣으니까 적용되 |
피드 구독하기:
글 (Atom)