2014년 9월 14일 일요일

담배가격인상에 대한 흡연자의 자세

해외 연초 직구매시

파이프담배는 250g 이하 and 대충 15만원 이하면 비관세

하지만 일단 담배이므로 개인 직구시에 세관에서 찾으면 

지방세하고 이상한 세금은 붙어나온다는...

여하간.... 100g 한통이면 함참 태우기때문에 이번에 300g 주문

한달이나 두달에 한번씩 구입하는것으로

세관에서 돈 내라고 하면 내고  (해봐야 얼마 안함..내가 대량 밀수 하는것도 아니고)

안잡으면 땡이고

국내 정식 수입한 100g 맥바렌 버지니아 4만원...직구하면 10달러(만원좀 넘음..)조금 넘는다는...

나라는 세금으로 뜯어먹고 유통자본은 유통마진으로 뜯어먹고 

대단들 하심

전자담배는 halo 해일로(http://www.halocigs.com/) 에서 구입하고 있었는데...

얼마전 부터 파이프 담배 맛보고 나서는 이제 전자담배는 불가....

15년 1월이 되기전에 담배 자체수급체계 구축이 목표임




너님 말대로 나는 담배 끊을 생각은 좃도 없음

Order Number:83664
Date:9/13/2014 12:50 PM
Status:Payment Received
Status Description:
Shipping Method:USPS First Class Mail International Parcel

Customer Information

Customer:
Email:@nate.com

Ship To

yongchan kwon
----, Manan-gu, Anyang-si, Gyeonggi-do
Anyang-si, 430-846 Korea, Republic of

Phone: 82109210----

Bill To

yongchan kwon
----
Anyang-si, 430-846 Korea, Republic of

Phone: 8210921---

Additional Information

I certify that I am 18 years or older and of legal age to purchase tobacco and tobacco related products from this website.: Yes
INTERNATIONAL CUSTOMERS: I have read, understand, and agree to your International Shipping Policy. You must agree or your order will be cancelled.: Yes

Product Information

Product NameItem NumberQuantityItem PriceTotal Price
Mac Baren: DARK TWIST 100g
MDT11$12.99$12.99
Peterson: GOLD BLEND 50g
PETGB2$9.05$18.10
B.J. Long: RUBBER PIPE BITS 2/Pack
BJLPB2$1.49$2.98
B.J. Long: PIPE CLEANERS: TAPERED REGULAR 100/Bag
LPCT1002$2.85$5.70
Denicotea: 9MM PIPE FILTERS - 40/BOX
15GE1$5.95$5.95
Mac Baren: 7 SEAS RED 100g
MB7RD1$8.99$8.99
$54.71
$32.85
$0.00
$87.56

2014년 8월 12일 화요일

오토바이 여행자의 준비


2014년 8월 10일 오후 9:27, 엄** <eo****@naver.com>님이 작성:
안녕하세요 ! 유투브에서 영상 너무나 잘봤습니다 ㅋㅋ

매번 그렇게 오토바이로 여행을 떠나시나봐요 !



제가 친구랑 45일정도 스쿠터 여행을 떠나려합니다.

스쿠터랑 유류비 지원을 스쿠터회사에 넣어서 협찬을 받아서 떠나는데요!



혹시 스쿠터 전국일주에 꼭 필요한것은 어떤것인지 정보 교류할수 있을까요?^^

한수 배우고싶습니다!!

====================================

안녕하세요 권용찬입니닷!

우선. 반갑습니다!!
다들 먹고 살기 급급하다고 뒤한번 돌아보지 못하고 달려가는 요즘에 큰 마음을 먹으셨군요.
저 역시 몇일 출장을 다녀오느라 답장도 못드리는 현실을 지내고 있으니... ^^
같은 마음으로 출발을 생각하셨을듯 하여 동지애 같은 것도 들고...반갑습니다.

협찬까지 준비하셨다니 준비성이 대단하신가 봅니다. 저는 그냥 무식하게 달렸습니다 ㅋㅋ

음...말씀하신 정보는.....
글쎄요... 블로그 글을 보셨을 것이니 몇 가지 말씀드려봅니다..

1. 오토바이는 여행지를 옮겨다니는 수단입니다.

말 그대로 수단이 목적을 대체해서는 않되겠습니다.
여행을 떠나게 되신 이유나..목적...등이 있으시리라 봅니다.
"스쿠터로 떠나는 전국일주 여행"에서  스쿠터나 전국일주에 방점을 두시지 마시고 "여행"에 방점을 찍으시길 바랍니다.
바이크는 차로 떠난 여행에서 아쉽게도 그냥 지나가야 했던 좋은 풍경을 놓치지 않고 서서 볼 수 있고
자전거로 힘들게 달리다보니 몸의 힘듦으로 주변을 돌아보지 못하는 문제들을 충분히 커버해 줍니다.
(물론 차,자전거 여행의 장점도 있습니다)

달리지 마시고 주변의 풍경과 처음 만나는 세상의 얼굴을 온몸으로 느껴보시길 바랍니다.
달리느라 피곤해서 저녁에 퍼져서는 않되고
추위에 힘들어서 아파서는 안됩니다.  반듯이 오토바이를 모시고 다니지 말고 타고 다니세요 ^^

2. 놀거리를 준비하세요 

친구분이라 둘이 떠나신다니 외로움은 적겠습니다.
아...혼자 떠나는 여행은 가끔...너무나 심심합니다.(개인적인 사색을 할 수 있는 좋은점도 있어요)
그래서 돌아다니면서 여흥을 위해 놀거리를 가지고 가세요
저는 카메라와 낚시대를 준비했었습니다.
...안타깝게도 낚시대는 찜질방에서 도둑을 맞았는지 흘렸는지 써보지도 못하고 떠나보냈지만...
나중에 돌아와 보니 카메라와 친해졌고 사진을 많이 담을 수 있어서 좋았습니다.

혹시 카메라를 가지고 떠나신다면  메모리 카드 하나로는 힘들겁니다.
32G 두장 정도 들고 다니시다가 한장이 꽉 차면 스페어로 두번째 사용하면서 시간날때 PC방에 들러서 클라우드쪽에 업로드 하거나 하는 방법이 있지만 업로드시간이 장난아닙니다.  저는 외장하드 하나 들고 떠나서 PC방에서 하드로 복사해서 다녔어요 ^^
RAW등의 후보정을 위한 대용량 사진은 비추천합니다. 후보정은 필요없습니다. 찍을때 내 기분을 담을 수 있도록 열심히 찍어보세요   JPG Large로 찍어도 돌아오실때 되면 엄청난 사진량에 힘들 수 있습니다. ^^

책같은 것은..... 가다가 서점 많으니까 사서 보시고 다 읽은 책은 지나가는 학생이나 찜질방에 양보하시고...

음악은 휴대폰에 적당히 담아가세요(메모리 정리하고 떠나세요....휴대폰으로 뭔가 찍을일 많을 겁니다.)



3. 여행을 떠나는 초심자의 마음

-돌아오실때 까지 초심자의 마음을 버리지 마시고

-너무 긴장에서 여행자의 마음을 배우지 못하고 돌아오시지도 않기를 바랍니다.

.떠날때 기대했던 것 만큼 여행이 재미있지 않더라고 실망하지 마세요
여행은 관광과 다릅니다.
긴 시간동안 아침에 눈을 뜨면 저녁까지 온전히 자신의시간을 챙기고 쉽게 말해서 노는대 충실한 삶을 살아보는 일 입니다.
집을 바리바리싸서 목적지에 가서 짐풀면 돌아갈 걱정을 하는것은 관광객이나 하는일 입니다.
떠날때의 기대만큼 현재의 장소가 마음에 들지 않더라도 너무 실망하지 마시고 스쿠터와 다른곳으로 가보세요 좋은곳이 있을 겁니다.
잘 모르겠을 때는 내 감각을 믿으세요 좋은 냄새가 나는곳으로... 좋아하는 색이 있는 곳으로 가보세요

.찜질방에 들어가서 물건 분실할까봐 ㄷㄷㄷ 하는 것은 어쩔 수 없는 여행자의 걱정입니다.
잘 생각해보면 내가 가진게 너무 많아서 혹시 일어버릴까 하는 걱정이겠지요

너무 걱정마세요 세상이 아무리 각박하다고 해도 여행자에게는 여행자의 행운이 따릅니다.
그리고 가끔 아까운 것을 일어버리더라고 너무 아쉬워 마세요 앞으로도 한참을 여행을 해야 할 것이고 일어버린 그것때문에 여행을 못하지느 않을 테니까요

4. 네비는 끄세요

네비를 켜고 운전할때는 비오는날 빨리 목적지로 가야할때...아프거나....힘들거나(그냥 거기서 내려서 쉬시는게 좋아요... 몸이 건강하지 않으면 여행은 고행이 됩니다.) 그럴때나 쓰시고
전국지도를 하나 구입하세요 너무 큰거 말고...접으면 도 단위로 대충 A4 사이즈로 접어지는것으로
그리고 스카치테이프로 앞뒤를 바르세요(방수)  그리고 지퍼백 큰거에다가 넣어서 바이크에 손 잘 닿는곳에 넣어두고
지도를 보고 방향을 대충 잡으시고  지도에 표시된 국도번호와 길의 이정표를 보고 여행하세요
처음에는 좀 어려울 수 있습니다. 그리고 도심지에서는 막막하죠(대도시 안에서는 네비도 괜찮아요,,그다지 볼것도 없으니..)
익숙해지면 나중에는 아침에 지도한번 보고 목적지 까지 잘 도착하게 된답니다 ^^

5. 여행기록을 쓰세요

작은 수첩하나와 팬을 준비하셔서 그날그날 있었던 일이나 나의 감정을 적어두세요
사진보다 이게 더 휼륭한 나에게 주는 선물이 될겁니다.
피곤해서 하루이틀 그냥 넘어가도 상관없어요
그냥 가끔 생각나면 몰아서 쓰셔도 되요
장황하지 않게... 다른사람 보는이 없으니 자기검열없이 글을 적어놓으시고
나중에 돌아와서 사진과 글을 같이 보면서 그때의 감정선을 다시한번 기억하시는 시간을 가져보시길 바랍니다.


너무 장황설이 되었내요

괜히 제가 흥분한것 같습니다. ^^

행복한 여행 되시고

혹여나 떠나시기전에 시간되시면 메일함 주세요 같이 소주나 한잔 해도 좋을 것 같내요

못 보고 떠나시더라도 나중에 글이나 사진 올리시면 꼭 좌표좀 알려주시구요 ^^

감사합니다.









2014년 7월 13일 일요일

구글사용자용 사이트 링크

구글 이용자들이 알아야 할 10가지 중요 URL
 
 
인도의 한 파워블로거가 자신의 IT블로그인 '디지털 인스피레이션(Digital Inspiration)'에 공개한 '구글 이용자들이 알아야 할 10가지 중요 URL'
 
▷ https://accounts.google.com/SignUpWithoutGmail
구글에서 새로운 계정을 만드는 대신 기존의 이메일 계정으로 구글 계정을 만들 수 있는 페이지.
 
▷ https://www.google.com/ads/preferences
구글 시스템 내에서 광고와 관련된 자신의 성별, 언어, 연령, 관심분야 등의 프로필을 수정할 수 있는 페이지. 또,이 페이지에서 구글 관심 기반 광고 선택을 해제할 수 있다.
 
▷ https://www.google.com/takeout
이메일이나 사진, 유투브 동영상, 캘린더 등 자신의 구글 계정에 저장된 모든 데이터의 사본을 다운로드하고, 맞춤 보관 파일을 만들 수 있다.
 
▷ https://support.google.com/legal
구글 웹사이트에서 본인의 허락 없이 자신과 관련된 콘텐츠가 발견되는 경우 관련법에 따라 구글 서비스에서 삭제하고 싶은 콘텐츠를 신고할 수 있는 페이지.
 
▷ https://maps.google.com/locationhistory
안드로이드폰이나 '구글 나우(Now) iOS' 앱 사용자일 경우 구글에 저장돼 있는 날짜와 시간대별 자신의 위치 정보 기록을 확인하고 원할 경우 삭제까지 가능.
 
▷ https://history.google.com
자신의 모든 검색 기록을 확인할 수 있는 곳.
 
▷ https://www.google.com/settings/account/inactive
만약 사용하지 않는 지메일 계정이 있는 경우 유효기간 지나더라도 구글이 해당 계정을 없애지 않도록 설정할 수 있는 페이지.
 
▷ https://security.google.com/settings/security/activity
누군가가 자신의 계정에 허용되지 않은 접근을 시도한 것이 의심된다면 가장 먼저 들어가봐야 할 페이지. 자신의 최근활동 기록에서 의심되는 활동이 있는지 확인한 후 비밀번호 변경이 가능하다.
 
▷ https://security.google.com/settings/security/permissions
자신의 개인정보나 데이터에 접근할 수 있는 모든 웹, 모바일, 데스크톱 앱 리스트.
 
▷https://admin.google.com/YOURDOMAIN/VerifyAdminAccountPasswordReset
계정이 해킹당했을 경우 구글 앱스 관리자 비밀번호를 변경할 수 있는 페이지. ('YOURDOMAIN' 자리에는 최상위 도메인을 포함한 자신의 url을 입력하면 된다)

2014년 6월 25일 수요일

WEB WAS에서 Time out 정리

Copy Right 락플레이스 차태승

회사 직원분이 정리한거 오...나 이런거 좋아해

ㅎㅎ

구분
지시어
기본값
 
WEB
HTTP
Timeout
300
비활성화된 연결에 대하여 얼마나 오랫동안 HTTP 연결을 유지하고 있을지를 설정
KeepAliveTimeout
15
아파치 프로세스 (또는 쓰레드) 가 클라이언트가 또다른 HTTP 요청을 보내기 전까지 대기해야 하는 시간을 설정
mod-jk
socket_timeout
0
mod-jkdhk was간 통신채널에서 사용하는 타임아웃, 정해진 시간동안 응답이 없으면 에러를 발생, 0으로 세팅하면 무제한 대기
socket_connect_timeout
socket_timeout*1000
socket_timeout과 같지만 milliseconds 단위로 타임아웃을 설정할 수 있다
socket_keepalive
FALSE
웹서버와 WAS 사이에 방화벽이 있는 경우 사용된다. 이 플래그는 운영체제에 비활성화된 커넥션에 대해서 KEEP_ALIVE메세지를 보냄으로써 방화벽이 비활성화된 커넥션을 끊는 것을 방지한다.
ping_timeout
10000
Millisecond 단위의 타임아웃값. Cping 커넥션확인의 응답인 CPong 을 기다릴 때 사용된다
reply_timeout
0
WEB에서 WAS가 처리되어 응답이 올때까지 대기시간
connection_pool_timeout
0
mod-jk가 커넥션을 닫기 전에 몇초 동안 Cache의 Inactive소켓을 유지할지 결정하기 위하여 Cache timeout 프로퍼티가 connection_pool_minsize와 같이 사용된다
WAS
HTTP/AJP
connectionTimeout
0
요청이 처리 될 때까지 커넥션을 유지하는 시간으로, 기본은 무제한
keepAliveTimeout
-
WAS에서 새로운 요청을 받기 전까지 대기하는 시간, 기본은 connectionTimeout 값을 따라감
session timeout
30분
요청이 들어온 후 새로운 요청이 들어올때까지의 대기시간, 그시간안에 다시 요청이 오면 해당 값은 갱신됨
DB
querytimeout
0
JDBC 쿼리 타임아웃, 기본값음 제한없음
loginTimeout
dbms별 확인필요
DBMS와 새로운 연결을 생성시 해당 DBMS에 Login 하고 Connection 을 획득할때까지 대기 시간
blocking timeout millis
30000
Millisecond 단위로 커넥션을 가져올 때까지 대기할 수 있는 최대 시간지정
idle timeout minutes
30분
풀에 있는 커넥션 중 사용하지 않는 커넥션에 대해 주기적으로 삭제, 해당 시간동안 사용하지 않은 커넥션을 삭제하며 검사주기는 지정값/2
set tx query timeout
FALSE
트랜잭션 타임아웃이 발생하기까지 남아있는 시간을 기준으로 쿼리 타임 아웃을 설정할 것인지를 설정
allocation retry
0
커넥션을 가져올 때 예외가 발생할 때 재시도 횟수를 지정
allocation retry wait millis
5000
연결 할당까지 대기하는 시간


혹시 태승씨 이 포스팅 보고 무단 도용이라고 승질 내기 없기~

조금 추가하면

Apache나 JBoss EWS 서버의 Timeout은 두 가지 구분해서 보아야 한다.

1. Client의 send 메시지 이후 GET Method가 실제 Apache Listner로 들어오는데 까지의 시간
TCP의 3단계 연결 수립이 성공하면 클라이언트와 아파치 서버 사이에는 TCP세션이 생성되고
브라우져는 GET 으로 URL Data를 전달하기 위해 send 메시지를 보내고 서버는 준비되었다는 의미로 ACK을 보내게 된다.
이때부터 실제 브라우져가 서버로 데이터를 보내는데  예를 들어  "GET HTTP 1.1 /index.jsp"  이런 데이터가 전달된다.
웹서버 에서는 TCP 연결 수립 후 ACK를 보내고 난 이후 실제 데이터가 들어오는 동안의 시간을 카운트 한다. 만약 어떠한  이유로 Timeout 시간보다 길게 데이터가 들어오지 않는다면 broken pipe가 발생하고 해당 세션은 파기 된다.

2. Requeust 처리를 위하여 mod_jk로 전달 후 대기하는 시간
위의 데이터를 전달 받아서 httpd 엔진이 분석 후 static contents는 자신이 처리한다. 이때 파일을 읽거나 전달 하는데 문제가 발생하는 경우(이런 경우는 거의 없지만...doc root 가 NAS 인데 NAS통신에 장애가 있거나...등)  또는 dynamic contents를 WAS로 전달 하기 위해 mod_jk proxy모듈로 전달 하고  이에 대한 처리 값이 돌아오는 시간을 카운트 한다.

이 경우 WAS가 처리하는 시간이 Timeout 보다 길어지면 broken pipe가 된다.
보통 이런 문제는 WAS가 외부 기관의 인터페이스와 통신하는데 문제가 있거나(실명인증, 포인트조회 등)  내부적으로는 DB에 전달한 쿼리의 수행이 timeout보다 오래 걸리는 등의 원인으로 발생한다.

일반적으로 웹 시스템은  2~3초 사이에 사용자에게 페이지를 표시해야 하므로
Timeout 60 같은 것은 사실 큰 의미는 없다고 보는 사람들이 많다... 사실 정상적으로 동작하는 시스템에서는 그러하다  (대부분의 다른 Timeout도 역시)

다만 이러한 값 들이 영향을 주는 경우가 있는데 장애상황 이거나 서버 자원이 부족한 경우 등에서 이다.
예를 들어 의미 없다고 Timeout 값을 크게 잡고 운영하다가 WAS나 DB, 또는 연계 시스템에 문제가 있어서 응답이 지연되기 시작하면 Timeout이 짧은 시스템의 경우 해당 세션을 날려버리고 새로운 요청을 받아들이지만 (어짜피 처리는 안되지만 안정성 면에서 더 잘 버틴다)
길게 셋팅 되어 있다면 요청들이 큐잉 되다가 결국은 완전히 Hang 상태로 진행 될 수 있다.

그래서 일반적으로 Timeout 값은 기본 값에서 늘이지도 줄이지도 않는다(장애 발생시 걱정된다고 너무 짧게 잡으면  BI 나 통계 시스템 같이 오래 걸리는 비지니스가 있는 경우 처리가 완료 되기 전에 끊어지는 상황이 될 수 있음)

다만 keepAlive는 사용자에게 좀 더 부드럽게 처리되는 느낌(?)을 주기 위해 사용하기 때문에 그 시간을 5초 수준까지 줄여도 별 문제가 없고(더 줄이려면 차라리 꺼라) 자원 사용량(netstat -an | grep 80 으로 보면)을 보면 값이 큰 경우보다 자원을 덜 소모하므로 운영에 도움이 된다.

2014년 4월 30일 수요일

common DBCP 사용시 Thread lock 문제

WAS에서 제공하는 DB Pool을 사용하지 않고
Apache Common DBCP를 사용하는 곳에서 가끔 DB Connection이 밀리는 현상으로 고생하는곳이 있다.

Common DBCP는 Thread Safe하기 위해서 Connection Pool을 Lock 하고 처리를 진행한다.

이건 해당 Thread의 처리 시간이 오래 걸리면 결국 다른 Thread들은 Connection Pool에 접근할 수 없다는 의미이다.

이 문제를 해결하는 가장 간편한 방법은 tomcat DBCP jar파일을 찾아서 바꿔버리면 해결된다.

tomcat다운로드 받아서 lib 폴더에 tomcat-dbcp.jar 를 찾아서 자신의 WAR에 추가하고

기존의 commons-dbcp-1.4jar, commons-pool-1.6.jar, commons-collections-3.2.1-bin.zip  등은 뻬버리자  (tomcat jar 안에 다 들어있다.)

org.apache.commons.dbcp.BasicDataSource  같이 commons로 된 놈이 있으면 아래같이 바꾸자
org.apache.tomcat.dbcp.dbcp.BasicDataSource

(버젼 문제도 안될 수 도 있다. 나에게 따지지 마라 ㅋㅋㅋ)

아니면 Frame work 나 자신의 DB Connection Manager 에서 JNDI Lookup 부분을 찾아서 WAS가 제공하는 DBPool로 바꾸어 주어도 된다.

설마 아직도 bean 이나 servlet에서 Connection 하는 사람은 없겠지....
Framework나 잘 구성된 Manager class를 사용하고 있다면
WAS Pool로 소스를 변경하는 일이 기능적으로는 큰 일이 아니다.

두려움....

혹시나....

어쩌겠는가...내가 할 수 있는일은 솔루션을 제공할 뿐 바꿔드릴 수 는 없음임  (하기 싫음 -.-)

여하간 삽질 하는 누군가에게는 도움이 되길 기원하며...



  1. 이슈
    1. DB Connection을 늘렸음에도 APP들이 getConnection에서 대기하고 있음
      1. DB Connection을 90개로 늘렸음
      2. Application getConnection에서 대기하기는 하지만 제니퍼에서 보면 DB Connection이 모두 사용되고 있는것은 아님
  2. 분석내용
    1. Thread Dump
      1. 특정 Thread가 DataSource를 Lock 하고 풀리지 않아서 다른 모든 APP들이 getConnection에서 대기하고 있음
      1. 해당 문제상태에서 Thread lock 상태 설명

        Icon
        <0x00000007957d27d8> (a org.apache.commons.dbcp.BasicDataSource): 0 Thread(s) sleeping, 803 Thread(s) waiting, 1 Thread(s) locking
        803개의 Thread를 locking 하고 있는 DBCP의 MultiConnectionManager Class
        at coperframe.common.data.impl.MutiConnectionManager.getConnection(MutiConnectionManager.java:74)
        그렇다면
        동일한 Thread가 Lock을 잡고 있어서 일까?
        아래를 보면 10초 사이에 5회에 kill 3으로 생성한 Thread dump 마다 lock을 잡고 있는 Thrad를 추려보았다.
        각각 다른 Thread 이다.
        결국은 하나의 처리가 오래 걸리면서 DBPool을 Lock 하고 이로 인하여 다른 Thread들이 대기 하는 상태로 Dead Lock은 아니고 느리게 처리되고 있는 상황으로 확인 할 수 있다.
        "ajp-0.0.0.0-12501-379" daemon prio=10 tid=0x00007fee78239800 nid=0x70d runnable [0x00007fee5203f000]
        java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.javaservice.lwst.SocketWrapper$InputStreamWrap.read(Unknown Source)
        at oracle.net.ns.Packet.receive(Unknown Source)
        at oracle.net.ns.NSProtocol.connect(Unknown Source)
        "ajp-0.0.0.0-12501-33" daemon prio=10 tid=0x00007fee78048000 nid=0x7b14 runnable [0x00007fee87921000]
        java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.javaservice.lwst.SocketWrapper$InputStreamWrap.read(Unknown Source)
        at oracle.net.ns.Packet.receive(Unknown Source)
        at oracle.net.ns.NSProtocol.connect(Unknown Source)
        at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:844)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnecti"ajp-0.0.0.0-12501-818" daemon prio=10
        "ajp-0.0.0.0-12501-348" daemon prio=10 tid=0x00007fee7820e800 nid=0x55d runnable [0x00007fee528a0000]
        java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.javaservice.lwst.SocketWrapper$InputStreamWrap.read(Unknown Source)
        at oracle.net.ns.Packet.receive(Unknown Source)
        at oracle.net.ns.DataPacket.receive(Unknown Source)
        "ajp-0.0.0.0-12501-793" daemon prio=10 tid=0x00007fee78516800 nid=0x1086 runnable [0x00007fee4b20d000]
        java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.javaservice.lwst.SocketWrapper$InputStreamWrap.read(Unknown Source)
        at oracle.net.ns.Packet.receive(Unknown Source)
        at oracle.net.ns.NSProtocol.connect(Unknown Source)
        at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:844)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:268)
        at oracle.jdbc.driver.PhysicalConnection. (PhysicalConnection.java:420)
        "ajp-0.0.0.0-12501-818" daemon prio=10 tid=0x00007fee78532800 nid=0x11de runnable [0x00007fee4b087000]
        java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.javaservice.lwst.SocketWrapper$InputStreamWrap.read(Unknown Sourc
        coperframe은 개발사 Framework로써 JBoss DB Pool을 사용하지 않고 있음
        사실 framework의 문제라기 보다는 해당 Common DBCP의 고전적인 Thread safety 문제일 것으로 판단되나
        DBCP를 분석하고 싶지 않아서 PASS함.
        이때 문제점은 두 가지 이다.
        1. Thread 처리가 느리다 = SQL이 느린것일 것이다. 쿼리 처리가 빨랐다면 좀 밀려도 대충대충 운영되고 있었겠지만 처리시간이 요청되는 속도 보다 느리기 때문에 결국 전체적으로 처리가 밀린것으로 보면 되겠다. 
          1. 현 시스템으로 마이그레이션 하기전 기존 사이트에서는 이상 없었다는 말이 여기서 나온다. 기존 시스템에서도 Jennifer로 보면 Active Thread가 30~50개 까지 쌓여 있는것을 볼 수 있었다. (정상적이라면 Active Thread는 10개 이상 올라갈 일이 없다.)
          2. 이것은 
            1. 기존 DB가 이전한 DB보다 빠르게 응답을 했다는 의미일 수 있고
            2. 이번에 튜닝을 가이드하면서 WEB/WAS 구간에서의 병목을 해결해 버림으로써 DB로 전보다 높은 부하가 들어가서 DB응답성능이 떨어진것으로 도 생각할 수 있다.
        2. DB Pool이 Thread safe 하다는 것은 병목이다.
          1. DB Pool에 getConnection을 하고 Connection을 받으면 해당 객체를 release 해야 한다. 자기가 처리가 끝날때 까지 Pool을 lock 하는 것이 문제다.
          2. 각각의 Thread가 getConnection을 하고 받은 connection으로 처리를 했다면 SQL처리가 느려서 밀리거나 Connection이 모두 소진되는 문제가 발생 할 수 있으나 이번에서는  Lock 문제로 발견되게 된 것이다. (http://stackoverflow.com/questions/12339726/multithreading-with-apache-dbcp)
          3. 짐작하기에 commonDBCP를 사용하면서 발생하지 않았을까 판단한다. 설명은 링크를 참고한다.(http://blog.naver.com/PostView.nhn?blogId=myca11&logNo=80127605636&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true)
        == 가해자 Thread
        "ajp-0.0.0.0-12501-379" daemon prio=10 tid=0x00007fee78239800 nid=0x70d runnable [0x00007fee5203f000]
        java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method) <== Read0 는 대부분 DB에 query를 보내고 대기하고 있는 상황을 의미함
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.javaservice.lwst.SocketWrapper$InputStreamWrap.read(Unknown Source)
        at oracle.net.ns.Packet.receive(Unknown Source)
        at oracle.net.ns.NSProtocol.connect(Unknown Source)
        at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:844)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:268)
        at oracle.jdbc.driver.PhysicalConnection. (PhysicalConnection.java:420)
        at oracle.jdbc.driver.T4CConnection. (T4CConnection.java:165)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
        at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
        at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
        at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:840)
        - locked <0x0000000798a1b9e8> (a org.apache.commons.pool.impl.GenericObjectPool)
        at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
        at coperframe.common.data.impl.MutiConnectionManager.getConnection(MutiConnectionManager.java:74)
        - locked <0x00000007957d27d8> (a org.apache.commons.dbcp.BasicDataSource)
        at coperframe.common.work.impl.DefaultWorkerManager.executeWorker(DefaultWorkerManager.java:61)
        at coperframe.common.struts.ActionHandler.callService(ActionHandler.java:42)
        at coperframe.common.struts.ActionHandler.callStaticService(ActionHandler.java:29)
        at coperframe.common.struts.WorkerAction.callService(WorkerAction.java:161)
        at coperframe.common.struts.WorkerAction.execute(WorkerAction.java:114)
        at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:413)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:225)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:446)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.tomato.com.http.HttpResponseHeaderFilter.doFilter(HttpResponseHeaderFilter.java:95)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.tomato.sso.sp.AuthFilter.doFilter(AuthFilter.java:47)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:183)
        at org.jboss.web.tomcat.service.session.ClusteredSessionValve.handleRequest(ClusteredSessionValve.java:135)
        at org.jboss.web.tomcat.service.session.ClusteredSessionValve.invoke(ClusteredSessionValve.java:94)
        at org.jboss.web.tomcat.service.session.JvmRouteValve.invoke(JvmRouteValve.java:88)
        at org.jboss.web.tomcat.service.session.LockingValve.invoke(LockingValve.java:62)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:95)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.internalProcess(ActiveRequestResponseCacheValve.java:74)
        at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:47)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
        at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:437)
        at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:385)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:451)
        at java.lang.Thread.run(Thread.java:662)
        =피해자 Thread
        ajp-0.0.0.0-12501-33" daemon prio=10 tid=0x00007fee78048000 nid=0x7b14 waiting for monitor entry [0x00007fee87922000]
        java.lang.Thread.State: BLOCKED (on object monitor)
        at coperframe.common.data.impl.MutiConnectionManager.getConnection(MutiConnectionManager.java:74)
        - waiting to lock <0x00000007957d27d8> (a org.apache.commons.dbcp.BasicDataSource)
        at coperframe.common.work.impl.DefaultWorkerManager.executeWorker(DefaultWorkerManager.java:61)
        at coperframe.common.struts.ActionHandler.callService(ActionHandler.java:42)
        at coperframe.common.struts.ActionHandler.callStaticService(ActionHandler.java:29)
        at coperframe.common.struts.WorkerAction.callService(WorkerAction.java:161)
        at coperframe.common.struts.WorkerAction.execute(WorkerAction.java:114)
        at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:413)
        at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:225)
        at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
        at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:446)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.tomato.com.http.HttpResponseHeaderFilter.doFilter(HttpResponseHeaderFilter.java:95)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.tomato.sso.sp.AuthFilter.doFilter(AuthFilter.java:47)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:183)
        at org.jboss.web.tomcat.service.session.ClusteredSessionValve.handleRequest(ClusteredSessionValve.java:135)
        at org.jboss.web.tomcat.service.session.ClusteredSessionValve.invoke(ClusteredSessionValve.java:94)
        at org.jboss.web.tomcat.service.session.JvmRouteValve.invoke(JvmRouteValve.java:88)
        at org.jboss.web.tomcat.service.session.LockingValve.invoke(LockingValve.java:62)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:95)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.internalProcess(ActiveRequestResponseCacheValve.java:74)
        at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:47)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
        at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:437)
        at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:385)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:451)
        at java.lang.Thread.run(Thread.java:662)

    2. 조치사항
      1. DB Lock 상태로 인하여 DB Connection을 다 쓰지도 못하고 App들이 정지상태로 대기하는 형태임을 설명해줌
      2. 개발팀에서 framework에서 DBCP를 빼고 JBoss DB Pool로 변경함
      3. JBoss DB Pool 설정 지원