제 맘을 모두 다 털어내고
정말 시원해지고 싶답니다.
매일매일 그렇게~ 지내고 싶은…
예쁜 마법 같은 노래입니다.
슈퍼주니어 Superman
정말로 행복한 노래가
여기 이곳에 쭉~ 울려 퍼지네요.



그러면 제 기분이 업업~
좋은 노래를 시작해볼까요?
시작해봐요. 노래는 대단해요.
쭉~ 빠져드는 멜로디를 느끼겠습니다.
뮤직을 즐겨볼 시간이군요. 슈퍼주니어 Superman
들어볼까요~,



방 창문 너머로 쭉 보면은 자주자주 가는 길도
아아~ 정말 가깝게 보여지곤 하는데
계속 거닐면 아… 정말 왜 이리 머나멀까요?
아~ 바로 코 앞에… 있어주는 것 같은데….
오랜시간 걸어야 도착을 한다니…
하하… 언제나 생각을 하니까~ 진짜 귀찮아지죠.
밖에 나가기 싫다는 생각^^;;;
아… 그래도 나가야 한다는 그 사실에 절망을 하죠.


휴… 그래도 저~~ 머나먼 곳에서 비춰지는
특정 한 건물이 그렇게 가깝게 보여서
거니는 맛이 한가득 나는 것이 아니냐…고
한동안 생각을 해봅니다.
역시나 그렇죠? 가깝게 느껴져야
편~안하게 거니는 거 아니겠나요^^?
하핫… 진짜 바보 멍청이 같지만 그런 것 같아요.


그 길을 나는 걸어봐요.
매~일 걷습니다.
매번 걷다 보면 정말 지겨운데도
항상 지날 수밖에 없으니… 걸어봐요.


그래도~ 가끔씩 다른 풍경들을 볼 수 있어서
아아~ 길지도 그렇게 짧지도 않은 길이랍니다.
뮤직을 들으며 거닐어보면
재미는 두 배로 변해요.
창 바깥으로 ㅉ욱~ 보던 길입니다.
내 자신이 거닐면 이렇게 신선해요~
이게~ 정말 신기한 것 같아요.

뮤직은 언제 어디서 들어도 좋아요.
난 뮤직 때문에 사는 사람이에요.
음악을 못 듣는다면 어떻게 살까요.
두려운 생각이 들 땐 항상
줄리아 하트 넘쳐나는 인생
이 노래를 듣죠.



그렇죠, 난 스스로가 좋아하는 음악을
올려보는 거지만 여러분마저도
이 멜로디를 좋아해주실 거라 믿어요.
그정도로 자신 있게 추천하는 노래
한번은 들어볼까요? ^_^
정겨운 음악을 들어볼까요? 줄리아 하트 넘쳐나는 인생
함께 들어요.,



불타오르는 마음을 가지고
힘차게 응원을 해요.
우리들이 더 아자아자!!
그렇지만 상대방도 힘내라~
이런 정신으로 말입니다!
그렇게… 응원을 열정적이게 하다보면 힘이든답니다.
으음, 당연히 힘들겠죠. 제 목도 쉬어버려요.
그래도~ 즐겁게 괴성을 지르면은
정말 기분이 최고예요!!


잔뜩 받은 스트레스를 따로 풀 필요가 없죠.
좋아하는 스포츠라든가
심지어~ 아무거나 상관없습니다.
정말 좋아하는 무언가를 제 마음에 지니고
열심히 응원을 해보는 거랍니다!!
그러면은 저도 기분이 좋아지기도하고
저~~기 멀리서 존재할 그 선수들도 정말 좋아할 거라고
전 믿고 있습니다!!
힘이들 땐 아리아를 감상하면서 쉰답니다^^


휴식할 시간도 아까워서
제 몸을 계속 흔들흔들 거리지만…
음악을 들으면 아주 조금 진정이 되죠.
계속 진정한 휴식을 취한 후
또 다시 열정적으로 응원해요.
아자아자!! 힘내라며 크나큰 소리로 말해요.
그렇게 저도, 모~두가 만족해요.

'Language > jennifer' 카테고리의 다른 글

DJ Unkle Tommorrow's Memories  (0) 2017.01.12

맘이 따뜻해지는 스토리가 있습니다.
이곳에서 시작해보려는 이야기들은
어떤사람의 얘기일까요?



음악이나 들으며 준비를 해봅시다.
김민종 착한 사랑
얘기를 들으면서 정화된 마음을
하모니로 다져볼까 하죠.
멜로디가 하나하나씩 나의 귓가로 들어오기 시작하면
나는 환하게 미소 짓고 답을해주는 거에요.
그러면 흥나는 곡하나 들어보시죠?
환하게 웃으며 감상할 수 있는 그러한 음악입니다.
정겨운 노래를 들어볼까요? 김민종 착한 사랑
시작합니다.,



오늘 하루는 정말 좋은 책을 바라보면서 거닐었습니다.
파란 하늘을 올려다보며
왔다갔다거리는 사람을 보며
매일 거닐던 거리를 걸어온 나 자신인데
음, 오늘따라 걍 좋은 책을 읽고 읽으면서 걸어보고 싶었네요.


타인의 시선 따위는 신경 쓰지 아니하고…
어떤 책이든간에 넘 좋아서 딱~하고 필이 오는 책을
따악! 하고 집었었는데
마~침 아주 예~전에 읽어봤다 만 책이라…
나름 신이 나는구나~ 해가며 좋은 책을 읽으며
길거리를 거닐기 시작했어요.


물론~ 선율도 함께 들었습니다.
집중이… 잘 될 듯 잘 안될 듯 하는 그러한 미묘한 마음속이
오히려~ 날 활자에 집중시켜준 거 같죠.
하하하 타인들이 속닥속닥거리는 소리도
들려오지 않으니까 오히려… 더더더 좋았답니다.


그렇게! 진짜 풍족한 하루를 보냈죠.
이~런 식으로… 일상을 보내면…
좋겠군~이라는 상상들을 해봐요.
내 책을 보면서 거니는 뭘 바라보고 거니는
도전해보지 않은 일들을 해봤으니까
작은 용기도 생겨났어요.
다시 한번 이어폰을 꽂은 후 내 세상으로 빠져들어요.
노래와 글자가 나를 즐겁게 만들어주죠.
기분좋은 일상이 될 것 같군요.


신기한 일을 시작해본다면 할수록 두려움이 커져요.
난 그런 적들이 정말 많아요.
그래도 신기한 일들을 하면 내가 성장을 한답니다.
그래서 힘이든다하여도 도전을해봐요.
DJ Unkle Tommorrow's Memories
이 노래처럼 말이죠.



놀랍다하며 칭찬을받아왔던 음곡입니다.
노래가 언제나 들어도 신선하죠.
정말 마음이 좋은 하루를 보낼 수 있을 것 같군요.
그렇지않나요? 노래를 들어볼까요?
선율이 저를 성장시킵니다.
요즘 아주 기다리는 뮤직 DJ Unkle Tommorrow's Memories
감상해봅시다.,



요즘들어서 매일매일 막 나온 노래만 들었지요.
아~ 어느 아이돌의 노래…
아님… 아주 옛날 가수가 발매한…
새로운… 앨범~?~?
그러한 뮤직만 감상해온 지 얼마나 흘렀을까요.
정말 조금씩 옛날~ 선율이
생각이 났습니다. 갑자기~ 말이죠~
그래서~ 예전에… 들었었던
엠피스리 리스트를 찾아봤답니다.


역시나… 정답이었어요^^ 여기에 잔뜩 존재하는
내 옛날 선율에 감탄을 하면서
하나하나씩 감상을 하기 시작했습니다.
옛날에 이 노랫소리를 많~이 감상해봤는데
이런… 마음이 들 때엔
이런 노랫소리를 많~이 들었는데…
소소한 기억이 조금조금씩 새록새록 떠오르고 있네요.
그런… 뜻으로 노래를 다시 한번 들어보는 건
정말정말 잘했다고 생각했어요.


아~~ 그렇게 시작된
내 추억 뮤직이 여행은
조금씩… 시작~
언젠가는 이런 괜찮은 하모니를
여러분…들에게도 들려주고 싶습니다.
하핫… 넘나 좋습니다.
흠… 난 노랫소리나 항상 들어봐야겠어요.

'Language > jennifer' 카테고리의 다른 글

줄리아 하트 넘쳐나는 인생  (0) 2017.01.16

예전 노래는 귀한 사람들만 즐겼던 특권같은 걸까나?
클래식같은 건 그렇지 않았겠어요?
아니래도 말고요~
항상 멋진 음악을 듣고 지내니 항상 귀족같은 마음이 들어요.



매일 돈, 돈 거리긴 하지만 기분은 풍족해요.
그렇게 풍족한 기분은 다 노래 때문…
가슴을 잔뜩하게 하는 뮤직을 들어보도록 할까요?
괜찮은 노래 한가지 알려드릴게요.
음, 감상해봅시다.
지금 감상할 한편의 뮤비는 새드 스토리 겨울에 이별하다
같이 들어볼까요?,



컴퓨터가 말썽을 부리더라고요. 청소했답니다.
쓱싹쓱싹- 성실히 청소를 했습니다.
먼지들이 자안뜩 쌓인 컴퓨터 앞에 앉아서는
저도, 컴퓨터도 얼마나 고생했을까요?
먼지들이 컴퓨터 고장의 주범이라면서요?
본체를 뜯어내는 게 조금 두려웠지만
기분좋은 컴퓨터 생활을 위하여 두려움을 참았어요.
그저 뚜껑만 열면 되는 거였네? 별거 없다니 다행….
그렇게 뚜껑을 열고난 다음 청소를 시작했답니다.
징그러울 정도로 먼지들이 가득있어서 진짜 너무 놀랐어요.


이래서 컴퓨터가 자꾸 꺼지고 말썽이었군…
하면서 마른걸레로 아주 조금씩 그 부분을 닦았습니다.
뭐하나 잘못 건드릴까 봐 노심초사하면서 닦았습니다.
그런데 이제는 약간 익숙해지니 할만하더군요?
구석구석 청소하는 와중에
뮤직을 한 곡 틀어서 작업을 시작했죠.
능률이 쭉쭉 오르더군요.
나중엔 뮤직에 도취해서 걸레가 마이크가 되버렸답니다.


원래 목적을 잃어버리고 노래에 빠져있다가
다시 한번 현실로 돌아와 열심히 컴퓨터 청소를 했습니다.
휴~ 되게 재밌었던 작업 같았습니다.
이렇게 청소가 완료되었답니다.
진짜 뿌듯하더라고요. 다시 조립하는데 손이 후들후들-
ㄷㄷㄷ 떨리긴 했지만 나름 잘 조립했답니다.
컴퓨터를 키니까 멀쩡하게 잘 구동되는 컴퓨터!


진짜 뿌듯해서 정말로 방 안을 뛰어다녔던 거 같아요.
나도 진짜 골빈애 같죠?
ㅎㅎㅎ 이젠 꺼질 위험 없는 색다른 컴퓨터로 탄생했어요.
먼지 청소는 정말 자주 해야 할 것 같더라고요.
뮤직 한 곡과 같이 오늘은 컴퓨터 청소해보세요.

하모니를 들어보아요.
정말로 괜찮은 노래가 계속해서 울려 퍼져요.
아~ 그래서~ 이 노래를
감상하려고 해요.
커피소년 니가 그리워
자자! 한번… 감상해보실까요?



하하… 안 들으면은 넘넘 서운할 거에영… ^0^
그럼… 이런 버튼을… 꾹…! 눌러봐주세요.
아아.. 노래가 정말정말 좋답니다^^
언제든… 감상해도 정말로 좋군요.
진짜~~ 넘넘 좋은 노래를 들어보죠.
이 노랜 즐겨듣는 노래 고른 것!! 커피소년 니가 그리워
함께 감상해보죠.,



정말 예쁘게 피어난 꽃을 보니까~
사진을… 찍고 싶었답니다.
오오^^ 그래서~~ 제가 들고 있던 스마트폰으로
사진을… 차알칵 찍어봤답니다.


으음~ 그…르고 원랜…
다른 곳에 올려보곤 하는데…
하하… 걍 남겨두고… 싶었어요^^
그런 날 있잖아요~~ ^ㅁ^
그래서~ 그..냥 담겨두었죠~~


그…리고 우리 집에 와가지고 보니까
정말로 좋고 좋았어요. 오오옹~~
내 자신이 이리 멋진 사진도 찍었군~~
하…고 말이죠~~ ^ㅁ^ 보는 내~내
넘넘 뿌듯해서 참을 수 없어서~~
결국엔 올렸지요. 왜 참았지^^?


글…은 뭘로 써볼까~~? 아아^^;;
정말 멋진 오늘의 시작!!!
들…판에 핀 생명~? 와^^ 오글…
그냥 멋~진 하모니 한가지랑
같이 올려야징~~! 하하하~~~


^ㅁ^ 저 음악 듣는거 진짜진짜 좋아좋아~~
노래를 감상해보며 찍은 사진들을
정리를해봐요. 그…러면 좋답니다.
아아.. 뭔가~! 뿌듯^^ 하모니를
계~속 감상해보니까 말이죠~~ 후후^^

맑은 하늘 아래에서 활동하는 스스로에게
한가지 물어봤답니다.
넌 지금 뭐하고 지내니? 라고 말입니다.
아무런 대답이 없었죠. 당연하겠죠?
그래서 곰곰이 생각했습니다. 나는 뭐하고 지내나….
전혀 떠오르지 않아 머리가 어지럽게 되었을 때
음악 하나를 들었어요.
김건모 시인의 마을



이 뮤직과 같이라면 나쁘지 않을 것 같아요.
들어보세요. 멋진 뮤직을 추천해보겠습니다.
그럼 시작할게요.
이 노래는 어느누구와 감상해도 좋네요. 김건모 시인의 마을
시작합니다.,



반려견이 아파해가지고 병원을 발빠르게 갔답니다.
아파오면 여러모로 골이 아파요.
돈은 잔뜩 들기도한데다 말도 못하는 게
어디? 어느곳이 아픈건가 잘 모르니까
전 애간장이 마구 탄답니다.
애 하나를 보호하는 것과 비슷하다고 하니까요.
그저 그냥 간단하게 검사같은것을 했습니다.


다행인게 크나큰 병은 아니어가지고 대충 자알 넘어갔네요.
휴우~ 십년감수 했어요.
그리고 안고 돌아오는중인데
강쥐가 기운 없이 축~하고 쳐져 있었습니다.
안타까우니까 정말 좋아하는 고기를 줬죠.
당연히 인간이 먹는 거 아니랍니다.
그랬더니 말이죠 다행히도 잘 먹네요.
그런 후 아리아를 들려줬어요.
이해를해줄까 안 할지 모르겠지만, 제 자신도 들어볼 겸 말입니다.
그러했더니 저의 기분을 알아채준 건가
환상적인 노랫노래를 이해하니까 그런가
어느새 잠이 드네요. 귀여워….


그렇게 정신이 하나 없는 하루를 보냈습니다.
아~ 그래도 뮤직만큼은 좋네요.
멘탈이 부숴졌던 개도 고요하게 만들어준다는 노래.
사람 맘이야 오죽 안정되겠나요.
괴로웠지만 이렇게 조용히 감상하니까
스트레스가 사르르 녹아내립니다.

'Language > JQueryMobile' 카테고리의 다른 글

JQueryMobile 속성표  (0) 2011.03.06
JQueryMobile UI - ListView ...  (0) 2011.03.06

저 높은 곳에서 바라보는 도시는
정말 신비로운 것 같아요.
제가 언제나 다니는 그런…길인데 넘 새롭게 보이는 느낌이
정말 신선하고 좋답니다. 그렇죠?
진짜 신선한 음 하나 선물해보겠어요.
Bigstar(빅스타) 독 같은 여자


좋은 선율이라 반드시 감상해보시면 하죠.
그러면은 하모니를 시작합니다.
어여쁜 음악이 저~기 저 머나먼 곳에서 울려 퍼지고 있어요.
하하. 선율이 아주 좋고 좋아서
나도 모르게… 야호야호~ 소리가 나오네요.
깔끔하게 좋은 곡 한번 듣고 가죠. Bigstar(빅스타) 독 같은 여자
감~상해봅시다!,



간만에 쭉~ 보는 가방….
과연 가방 속엔… 뭐~가 들었을까요?
으음, 한참동안 뒤적이고 있었는데
와아… 이게 뭐냐?
그냥 쓰레기통이었습니다.
예~전에 한참 찾다가 포기한 물건들도 발견했고
다 먹고 난 다음 버리지 않은 비닐.
와, 심지어 돈도 나왔어요.
도라X몽의 주머닌가? 하하.


오래간만에 살펴보는 오래된 가방에서
돈도 한가득 나와서 정말로 깜짝!! 놀랐던거 같아요.
하하, 그리고 내 용돈으로 잘 썼답니다.
잊어버린 것도 찾고….
가방정리를 잘해야겠더라고요.
하~도 많아서… 넘 힘이들어서
하모니를 감상했어요.
힐링을 받았답니다. 역시 선율!!
그렇게 또 다시 힘을 내어서
다시 가방을 정리를 했어요.


하핫… 시간 잘 가는군요.
하모니가 계속해서 넘쳐흐르고
음, 어느 정도의 시간이 흘렀답니다.
아아! 정말 힘들지만 뿌듯한 하루랍니다.
예전 가방을 정리를 하면서 뮤직을 감상하며
그래요. 오늘 나름… 괜찮았던 하루랍니다.

'Language > jsp' 카테고리의 다른 글

jsp 엑셀 다운로드 ...  (0) 2009.02.02
테이블에 무늬 넣기(Zebra Striping Made Easy with jQuery)  (0) 2008.11.22
jQuery로 Ajax 개발을 단순화 하기  (0) 2008.11.21
netstat 명령어  (0) 2008.09.02
JSP에서의 ajax로 예제 AJAX  (0) 2008.07.31

뮤직이 정말 좋지 않나요?
작열하는 빛을 받아가며
깨어나는 듯한 하모니입니다.
태양보다 따끈한 뮤직.
코요태 Hollywood
밝은 아리아에 대한 감상뿐만이 아니라
구슬픈 발라드 멜로디에도 충~분히 전해지는
그런 멜로디가 있죠.



바로 이런… 하모니가 아닐…까요?
그럼 곧바로 들어보겠어요!!
정말정말 괜찮은 뮤직입니다.
이 음악은 사람을 즐겁게 합니다. 코요태 Hollywood
들어보는 시간, 큐!,



뮤직을 들으면서 어떤가를 하면
대개 사람들은 집중이 잘 되는거니? 라고 물어본답니다.
잘 되지않는다고 하는 사람들도 많습니다.
그런데 난 노래를 들으면 집중이 잘 되는 편이에요.
기본 두 가지 일을 한다면 더 잘하는 것 같죠.
정신 사납다고 하는데 저는 정말~
그래서~ 오늘 하루도 능률을 위해서라도 멜로디를 틀었죠.


나 혼자서 듣는 뮤직이 못내 아쉬워요.
이처럼 좋은 노래를 모두와 같이 듣지 못하다니
너무 아쉬울 따름이죠. 그쵸?
이렇게 난 저 혼자만의 세계에 빠졌죠.
감정 이입을 하며 들으니 일도 즐거웠답니다.
음악에 맞춰가며 타자도 해보고.
음율에 맟춰서 성실히 일했습니다.
이렇게 순수하게 일을 하다 보고있으면 시간도 정말 잘 갑니다.
가버리는 시간을 잡고 싶을 정도로 말이죠.


흥얼흥얼- 머 이렇게 시간이 빨리빨리 가는 걸까나.
지루하지 않게 노래도 늘 다르고
언제나 섞어서 들으니 듣기 이상하지도 않아요.
이어폰도 정말 좋은 이어폰을 써서 그런걸까요?
이렇게 난 오늘도 노래와 같이 일해요.
멋진 노래가 있다면
늘 다 같이 하고 싶은 마음뿐이죠.
요런 좋은 노래, 저 혼자서 듣기 아주 아깝잖아요?


또 알지 못했던 노래도 많이 발견해놓고 싶네요.
언제, 어디서든 노래와 함께하는 저….
분명히 힘들고 고된 하루일 텐데
음악이 나를 마사지해주는 듯한 시원하고 감사한 감정.
그러한 느낌을 많이 받습니다.
음악을 들으며 좋아지는 하루랍니다.

Java로 소프트웨어를 개발하는 사람이라면 누구나 한번쯤 Out Of Memory Error(이하 OOME)를 만나 보았을 것이다. OOME의 경우 Java의 다른 Error와 다르게 원인과 대응을 하기가 쉽지는 않다.

경험에 비추어 보면 OOME가 발생하는 시점은 대부분 개발이 대부분 완료된 후 사용자 테스트 혹은 인수 테스트단계에서 많이 발생한다. 즉 개발 단계에서 수행하는 단위 테스트의 경우 목적 기능에 대한 검증 위주로 진행 되기 때문에 식별이 어렵고 가동 초기 단계 혹은 이와 유사한 테스트 환경에서 주로 발생하게 되는 것이다. 때문에 OOME가 발생하는 시점에서는 빠르게 대응해야 하는데 경험에 의한 JVM Option을 통한 처리 방법과 Dump 파일의 분석을 통해 대응을 하게 된다

JVM Option
Java의 최대 장점은 한번 만들어진 애플리케이션은 JVM이 존재하는 OS/하드웨어에서도 동작을 한다는 것이다. 그러나 이는 동작을 한다는 것이지 성능을 보장하지는 않는다. 때문에 OS/하드웨어별로 JVM의 설정을 변경하여 성능을 보장하기 한 것이 JVM옵션이다. JVM옵션은 JVM표준인 Standard 옵션과 Non-Standard옵션으로 구분 된다.

  • Standard Option : JVM표준 옵션으로 벤더(JVM을 만드는 회사. Oracle(Sun),IBM,HP,..)와 상관없이 동일한 옵션을 가진다. 32/64Bit,클라이언트/서버 모드 설정과 같이 환경위주의 설정
  • Non-Standard Option : JVM표준이 아니라 Java의 버전,벤더에 따라 추가되거나 없어 지기도 한다. 그러나 성능에 직접적으로 영향을 주는 옵션들이다. 주로 -X,-XX 로 시작된다.

참조 : http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

Dump 파일 분석
애플리케이션 운영 중 장애 혹은 성능 상 문제가 발생하였을 때 애플리케이션의 상태를 스넵샷 형태로 파일로 저장한 것이 Dump파일이다. 때문에 Dump파일의 분석을 통해 장애 발생 시 애플리케이션이 어떠한 상태 였으며 어떤 점이 문제가 되었는지 확인 할 수 있다.
분석에는 여러 가지 Tool들이 있으며 VisualVM,Eclipse mat 등이 있다. 이를 사용하는 방법은 다음 기회에 설명하도록 하겠다.

아래 내용은 최근 프로젝트를 수행하면서 OOME가 발생하였을 때 오랜만에 다시 공부해본 Java의 메모리 구조에 대해 정리한 내용이다.

Java Virtual Machine의 구조와 JVM Option

OOME는 다양하게 발생하는데 대부분 다음 예외를 많이 접하게 될 것이다.

Exception in thread “main”: java.lang.OutOfMemoryError: Java heap spac
Heap size의 부족으로 Java Object를 Heap에 할당하지 못하는 경우. JVM 옵션 설정을 하지 않은 경우 많이 발생한다.

Exception in thread “main”: java.lang.OutOfMemoryError: PermGen space
Class나 Method 객체를 PermGen space에 할당하지 못하는 경우 발생하며 애플리케이션에서 너무 많은 class를 로드할 때 발생한다. 주로 잘못된 설계/구현에 의해 발생한다.    -XX:PermSize, -XX:MaxPermSize Option을 이용하여 오류를 수정하기도 한다.

Exception in thread “main”: java.lang.OutOfMemoryError: Requested array size exceeds VM limit
사용할 배열의 사이즈가 VM에서 정의될 사이즈를 초과할 때 발생한다.

Exception in thread “main”: java.lang.OutOfMemoryError: request bytes for . Out of swap space?
Java는 런타임시 물리적 메모리를 초과한 경우 가상메모리를 확장해 사용하게 되는데 가용한 가상메모리가 없을 경우 발생한다.

Exception in thread “main”: java.lang.OutOfMemoryError: (Native method)
JVM에 설정된 것 보다 큰 native메모리가 호출 될 때 발생한다.

 

위와 같은 OOME를 해결하기 위해서 먼저 JVM구조를 이해하고 있어야 한다.

JVM-1

그림-1 Java Virtual Machine Model


JVM은 위에서 보는 것과 같이 여러 영역으로 구성이 되어 있으며 JVM Option을 통해 각 영역별로 메모리 할당이 가능하다. 일반적으로 OOME가 발생하면 각 영역별로 메모리 옵션을 늘려 대응을 하게 된다.

아래 그림은 각 영역들과 JVM option을 통해 관리가 가능한 방식을 설명한 것이다.


JVM-2

그림 2 HotSpot JVM 구조와 영역별 Option


하지만 불행하게도 시스템의 물리적 리소스는 한정이 되어 있어 한 영역의 메모리 사이즈를 늘리게 된다면 다른 영역의 메모리는 줄어 들어 또 다른 문제가 발행할 수도 있다. 예를 들어 전체 2G 메모리 사용 중이고 Heap영역이 1.5G    PermGen space 영역이 256MB를  할당하였다. 이때 PermGen space에서 OOME가 발생하여  516MB로 늘리게 되면 Heap영역은 1G로 줄여들게 된다. 때문에 Dump파일의 분석을 통해 정확한 진단을 한 후 원인을 수정하도록 한다.


잘못된 Application과 OOME

위에서 설명한 영역들에서 발생하는 OOME 중 오늘 이야기 하고자 하는 영역은 Permanent Space에서 발생하는 오류 이다. 보통 잘못된 코딩으로 인해 발생하게 되는 OOME의 대부분은 Permanent Space에서 발생하게 되는데 최근 프로젝트에서 발생한 오류도 Permanent Space에서 발행한 오류였다. 친절하게도 java에서는 OOME 가 발생한 영역을 아래와 같이 설명해 준다.


JVM-3

그림 3 Java Out Of Memory Error 예시


Perm Gen space에서 발생한 오류에 대해 대응하기 전에 Perm Generation 영역에 대해서 알아보면 Permanent Generation은 young과 old를 구분하는 Generational Collector 방식인 HotSpot JVM 중 한 영역으로 객체의 생명 주가기 길다고 판단되는 객체들을 이 영역에 할당하여 GC대상에서 제외를 하기 위해서 만들어진 영역이다.  주로 자바의 Class 객체들이나 문자열에 속한 String 객체들이 위치한다.

일반적으로 Class의 로딩은 시스템의 Class path에 의해서 로드된 Class 객체들과 에플리케이션 내 구현으로 다이나믹하게 로드되는 class들이 있는데 주로 문제는 애플리케이션 내 로직으로 다이나믹 하게 생성되는 Class들에 의해서 발생된다. 최근에 많이 사용되는 Spring, MyBatis등과 같은 프레임워크 등이 이와 같은 방식을 취하고 있다. 때문에 위 프레임워크들을 사용할 경우 OOME발생에 주의를 해야 한다.

최근에 발생한 원인은 이들 프레임워크 중 iBatis(구 MyBtis)를 잘못 사용하여서 발생한 것으로 iBatis를 잘못 사용하여 발생한 경우로 볼 수 있다.

프로젝트에서 iBatis를 사용하기 위한 기본 아키텍처 구조는 다음과 같다.

JVM-5

그림 4 iBatis Dao를 이용한 데이터 접근


iBatis의 dao.xml파일 내 사용할 DAO객체 정보를 설정하고 런타임 시 DaoFactory에서 dao.xml을 읽어 DAO객체를 인스턴스화 하는 구조로 다음 같이 구현하였다.

 

이 과정에서 iBatis는 내부적으로 DaoManager 클래스를 다이나믹하게 생성하고 로드하는 과정이 존재한다. 이때 단순하게 이 클래스만 로드되는 것이 아니라 이 클래스에 연관된 다른 클래스들(위 그림에서 보면 색으로 표시된 부분)도 같이 로드되고 위에서 설명한 것처럼 Perm Gen spac에 할당된다

때문에 가급적 메모리의 부하를 적게 하게 위해서 설계 원칙 중 하나로 도메인 별로는 하나의DaoFactory만 생성하고 이를 싱글톤 패턴을 적용하여 관리 하고 있으며 이미 여러 프로젝트를 통해 검증된 방식으로 OOME가 발생할 수 없는 구조로 볼 수 있다.

그러나 Dump파일을 분석한 결과 DAOManager클래스 객체가 Perm Gen space에 매우 많이 쌓여져 있는 것으로 분석되었다.

실제 구현 소스를 살펴 보니 어찌된 이유 인지 같은 DB에 접속하는 동일 도메인 내에서 여러 개의 DaoFactory가 구현되어 있다. 원인을 살펴본 결과 각 영역별 담당자별로 DaoFactory를 만들어 사용하고 있던 것이 문제였다.

JVM-6

그림 5 설계 방식과 실제 구현방식의 비교


이를 원래 설계 원칙 대로 수정한 결과 더 이상 OOME에 대한 오류는 발생하지 않았으며 정상 동작이 되었다.  이와 같이 아무리 잘 설계된 아키텍처라 하더라도 잘못된 구현으로 인해 OOME가 발생할 수 있기 때문에 항상 조심하여야 한다.


마치며

Java라는 언어가 이전에 탄생된 언어에 비해서 메모리 관리에 있어 편리한 장점이 있다고 알려져 있고 많이 개발자들이 애플리케이션을 개발하게 되면서 메모리관리에 대해서는 GC가 해결을 해 줄 것이라고 생각하고 JVM의 구조를 이해하거나 메모리 영역에 대해서는 개발 단계에서 많이 고려하지 않는다. 그러나 최근은 고객의 요구사항은 점점 다양해지고 시스템도 같이 복잡해져 가면서 메모리 문제는 언제 어디서나 마주 칠 수 있다. 비록 과거에 비해 시스템의 사양이 좋아져 대부분이 애플리케이션이 많은 메모리를 이용할 수 있다 하더라도 자원은 늘 한정되어 있는 법이니까.

Java의 Reflaction 기능을 이용하거나 이용하거나 Spring이나 MyBatis와 같은 프레임워크를 사용하는 경우는 메모리에 대한 고려를 하여 설계를 하여야 한다. 또한 JVM의 메모리 구조를 알고 OOME가 발생하였을 때 빠르게 대처 할 수 있는 능력을 가져야 하는 것이 개발자로서 필요한 소양이 아닐까 한다

참조 URL

http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/preface.html

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning

http://www.youtube.com/watch?v=VQ4eZw6eVtQ

http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html



출처 : http://dryang.egloos.com/viewer/4005363

'Language > java' 카테고리의 다른 글

Jakarta Commons Net 에서 FTP  (0) 2014.01.17
URLConnection 에서 cookie 제어  (0) 2013.10.07
JSTL 사용하기  (0) 2012.06.05
[스크랩] JVM 튜닝  (0) 2010.04.21
[스크랩] JVM 튜닝  (0) 2010.04.21

+ Recent posts