2017년 1월 4일 수요일

JBoss EAP7 의 변경된 Connector와 Thread 처리

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를 권하고 싶다.

.이상




2016년 12월 17일 토요일

2016년 12월 A형 독감

패북에 올렸다가 좀 더 정리해서 블로그로 넘겨봄...

먼저 참고하실부분

질본 - 인플루엔자 유행 빨라, 아동 및 청소년 주의 당부

질본 - AI 바로알기 (메르스와 별반 안다름...닭오리 만지지 말라고 함)

질본-AI 위기단계 격상(경계→심각)에 따른 인체감염 예방 대응 강화

신종플루 (H1N1) 
15년 기준으로 국내 감염자는 약 76만 명[19], 사망자는 총 270명이다. 인구 대비 감염자 수로 전 세계 8위를 차지했다.   출처-위키

소독제와 신종플루에 대한 글

마스크의 구분


.그저 계란값 올랐다고 투덜거릴상황이 아니라고 봅니다.

정부발표를 잘 들어보면
...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년 11월 12일 민중총궐기 집회


2016년 11월 12일 민중총궐기 집회 3회

Archive용 포스팅

가는길

서울역에서 시청으로





박근혜는 하야하라


































이승환 공연




.끝

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

#삽질의왕국

2016년 7월 30일 토요일

인간적으로다가 말이지 ....

거실등도 나가고 뭐도 사고 뭐도 사고 해야 하고 얼마전부터 정우형이 인간적으로다가 쿠폰도 준다길래 (아는 사람은 안다 점점 VVIP지원이 없어지더니 요즘은 걸래취급을 하고 있었다는...

인간적으로다가 말이지
뭐 좀 좋아졌나 들어갔더니 오~!!! 장바구니 쿠폰 5처넌이 똭!


VVIP래요...뭐 이래 많이 넣어주기는 해요
우앙~ 11번가사장님 망하시려고 작정하셨쎄요~ 기획자분 사랑해요~~ 하면서 장바구니 결제를 누르면서 막장이 시작됨..... 처음 대충 30만원어치.....쿠폰 적용이 안됨...5만원 이상이여야 한다고함...

29만원어치에 5만원이 안되는 쿠폰적용가는 뭐야.... 

씨바...제품당 쿠폰대상 금액이 얼마나 짜길래 안된다는거야????? 아...이거 내부적으로 장난 무진장 쳤나 보구나.... 한번 사면 50만원정도 구입하는 나로써는 기본 이론상 5만원씩 쪼개서 구매하면서 매번 장바구니 쿠폰 먹이면 이거 적용되면 대박이긴 한데.... 쓸대없는 물건을 더 사라는건가... 그래서 바꿔봄....이리...저리....요리...조리.....


제품을 바꿔보고...


단품 비싼거도 넣어보고


이래저래 넣어보고....

하하!! 짐작하겠지만 졸라 많이 시도해봤음 간만에 직원된 기분임!!! (QA???) 개쌍!~~!!!!!! 씨바 장난하냐!!! ㅂㅈ거댜81ㅂ03ㅕㅗㄱ8ㅗ13!!!!! 내가 니들 물건값에 쿠폰 대상금액까지 알아야 VVIP 취급해주겠다는거냐 뭐냐! 결국 비슷한 금액에 뭔가 삑사리난 제품하나를 끼워넣었더니 쿠폰적용됨(나는야 의지의 한국인)

씨바...인간적이야...산소포화도 측정기 넣으니까 적용되

아놔....혈액산소농도 측정기...3만원짜리 넣으니 5천원 쿠폰된다... 이 얼마나 휴머니티한가 안그래도 9월에 지리산(해발 1915m)에 가려고 예정하고 있었는데 어찌 아시고... 저산소 증으로 디질까봐 산소포화도 측정기를 넣어보니 적용이 됨 (참고로 고산증은 2500 이상 보통 3000m 수준에서 발현...한국에서는 고산증 일 없음) 기준으로 모르겟음 콜센터에 전화 잘 안하는데 이거 알고리즘이 어떻게 된건지 물어보고 싶음 이거 사버릴까? ㄷㄷㄷㄷ 뭐 덕분에 개짜증난 상태로 마눌님 사줘야 할 것만 골라서 구입함 (거짓말...사실 포토프린터가 너무 가지고 싶어서 결국 20만원이 넘었어!!! 엉엉~~~) 처음 사장님 칭찬 기획자 칭찬 싹다 욕으로 바꿔서 씨불거려 가면서 당장 필요한거 몇개만 구매함(당연 쿠폰안됨) 쓸대없이 VVIP라고 해서 주가다 뺐어가지 말라구요 빡쳐요 쓸대없이 VVIP라고 뭐 준다고 사기치지 말아아요 개빡쳐요 물론 호갱센터나 담당자는 이유가 있겠지 근데말이다..... 물건 사는 사람은 지불하는 비용에 관심있지 당신들 비지니스를 어떻게 하는지 궁금하지 않다고 11번가 초반부터 VVIP였던 사람 개쓰래기 취급 그만 합시다 #정신좀차리라고 #이런이벤트는몰래해 #욕얼마나처먹어봤어