분류 전체보기

    Tomcat & Java의 memory leak 분석

    Tomcat & Java의 memory leak 분석

    쓰레드풀에서 생기는 메모리 릭 분석을 하다보니 또 포스팅하게 되었다.생각해보면 학부 이후 Java 개발을 시작한 2008년도부터 늘 걱정되는 부분이다. JVM 덕분에 메모리 관리를 하지 않아도 되서 자바가 편하지만, 반대로 메모리 문제가 생기면 정말 짜증나게 하는 것이 또 자바이다. 가끔은 내가 왜 C/C++만을 하지 않았을까 하는 후회가 들 때도 있다. C/C++을 이용하여 Visual Studio에서 개발하는 것이 그립기도 하고 순수 MFC 개발자가 부러울 때가 종종 있다. 잡설은 집어치우겠다.. 메모리 릭 현상을 분석하다가 로그의 한계가 드러났다.자세하게 분석을 해봐야겠다고 판단하였고 다시 한번 Eclipse MAT(http://www.eclipse.org/mat/)을 사용해봐야겠다고 판단되었다. ..

    Tomcat 및 Java ThreadPool에서 memory leak 현상

    Apache Tomcat6에서 구동하던 웹 애플리케이션에서 다음과 같은 에러를 발견하였다. 심각: The web application [/ AP_NAME ] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.2012. 7. 12 오후 1:58:59 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads심각: The web application [/ AP_..

    이익훈 어학원 토익백신

    잠깐 휴식기를 갖는 동안, 영어공부를 좀 더 해야 할 필요성을 느끼고, 혼자 하는것보다는 학원을 다녀보는게 좋겠다고 생각했다. 이전처럼 지방에 있던 것이 아니기 때문에, 서울에서 조금 이름있는 학원을 한번 다녀보는 것도 괜찮은 일이기 때문이다. 그러나 나이가 많다보니 주변의 학원의 추천을 받기도 뭐하기에 인터넷으로 추천하는 강좌를 찾다보니 나온 것이 토익백신이었다. 그렇게 찾은 수업을 신청하고 일주일이 지났다. 받은 책의 표지에는 "쓰레기 수업은 가라"고 되어 있는데, 이 말대로 기존에 알고 있는 수업들과는 정말 판이하게 강사님들이 열정적으로 잘 가르키신다. 직장인이 하기에는 조금 힘들만한 과다한 숙제량이 조금 버겁긴 하지만, 강사님 말대로 숙제할 공부시간도 없다면 점수 올리기는 힘들것으로 보인다. 조금..

    비가 오니까.

    2012년 7월 5일. 언젠가부터 늘 입에 달고 말하기 시작했다. "시간이 참 빠르다."라고. . 내가 생각했던대로 되어가지 않는다. 꿈을 위해서 많이 노력했다고 생각했는데 노력이 부족했을수도 아니면 잘못된 길을 선택했었던건지도 모른다. 그저 막연히 고통의 시간을 인내하면 꿈꾸는 그 날이 올꺼라고 생각하며 20대의 모든 시간을 바쳤는지도 모른다. 그래서 나에겐 20대의 끝물에 다가온 이 계획하지 않았던 현실의 시간이 버겁게 느껴진다. . 오늘같이 비가 오는 날에 돌이켜보면 비 내리는 풍경을 뒤로 하고 술집에서 또는 집에서 술 한잔 기울이며 힘든 일, 시덥지도 않은 이야기들을 하면서 보냈던 시간이 너무나 그립다. 지금도 불가능한 것은 아니지만, 언제까지 미래의 행복을 위해서 현재의 내 행복을 포기하면서 시..

    자바 기본 메소드의 구현

    toString, equals, hashCode메소드를 구현하는 방법에 대해 적는다.Effective Java에서 보면은 구현해야 할 이유와 잘못된 구현과, 올바른 구현에 대해서 알 수 있다. 예제.toString은 마음대로 구현해도 상관 없다.@Overridepublic boolean equals(Object obj) {if(obj == null || !(obj instanceof AtinStory)) return false; AtinStory inf = ( AtinStory ) obj;return id.equals(inf.id) &&name.equals(inf.name) &&index == inf.index &&subnetIp.equals(inf.subnetIp) &&netmask.equals(inf..

    MyBatis NumberFormatException 문제

    MyBatis를 이용해서 개발중에 NumberFormatException이 발생했다. 발생한 위치는 다이나믹 쿼리에서 발생했는데 그 이유를 알지 못해서 엉뚱한 곳에서 찾다가 문제를 알게 되었다. NumberFormatException의 발생 위치 이 부분인데 iBatis, myBatis를 개발한 사람들이라면 다 알 것이다.문자열 비교시에 ==를 하면 안되고 eq를 써야 한다는 것을 말이다. Java에서 문자열 비교시에 equals를 써야 하듯이 iBatis, myBatis에서는 eq를 써야 한다.iBatis, myBatis에서는 문자열에 따라서 알아서 내부적으로 파싱처리를 한다. 간단한 문법을 까먹어서 잠시 고생을 했다. 그런데 내 기억상으로는 eq로만으로 iBatis에서는 되었던 것 같은데 myBati..

    Java간의 통신

    근래 Java간의 통신때문에 고민하고 있다. 고대부터 전해오던 RMI란 유물이 있지만 이 녀석은 은근히 마음에 들지 않는 녀석이다. 현재 Java간의 통신을 만들 두 시스템은 WAS 없이 데몬으로 실행되는 서버다.서버1은 GUI와 TCP통신을 한다. 그러나 서버1과 서버2를 TCP통신을 하기에는 껄끄러운 면이 많다. 아직 고민중이지만, 통신을 하기 위해 고민했던 사항들을 나열해본다. 1. RMI 자바에서 표준으로 지원해주고 직렬화가 잘 되어있어서 편리한 면은 있지만 방화벽이 있는 경우에 문제가 있고 자바 서버(rmiregistry)를 실행해줘야 하며 통신을 하기 위한 클래스를 stub파일로 생성해주어야 하는 번거로운 면이 있다. Spring에서도 RMI를 지원해준다고 해서 찾아보았지만 자바 서버를 실행시..

    Qt(Qt Development Frameworks)란 무엇인가?

    작년에 회사에서 한 부장님이 Qt가 정말 좋다라면서 극찬을 했는데 요즘 보니 Qt를 많이 쓰는 것 같다.늘 관심이 가고 있었는데 오늘 잠시 조사를 해보았다. Qt는 Qt Development Frameworks에서 나왔다. 이 회사는 과거 Trolltech로서 2008년에 노키아에 인수되면서 노키아 내 그룹으로서 있다. Qt의 장점은 여러가지가 있지만, Qt의 홈페이지에는 다음과 같이 나와 있다. "Qt는 크로스 플랫폼 어플리케이션 및 UI 개발을 위한 프레임워크입니다. Qt를 사용하여 애플리케이션을 작성한 후에 소스 코드를 다시 작성하지 않고 다수의 데스크톱과 임베디드 운영 체제에 배포할 수 있습니다." Qt를 이용하여 C++코드를 작성하면 플랫폼에 구애받지 않고 돌릴 수 있는 것이다. 놀라워라.Emb..

    Netty서버에서 1024이상 받지 못하는 문제의 해결법

    Netty를 이용하여 Java 서버를 개발하고 있다.그런데 클라이언트쪽에서 새로운 문제를 얘기해주었다. 서버로 넘기는 데이터의 크기가 크면 처리가 되지 않는다는 것이다. 문제를 찾아보니, Netty에서 기본적으로 1024이상 받지 못하게 되어 있었다.Netty의 기본 리시브 사이즈가 1024로 설정되어 있는 것 같은데 설마 그것에 대한 수정도 안되게 만들지는 않았으리라 생각되었다. 다만 문제는 Netty에 대한 자료가 거의 없기 때문에 애를 먹었다.당연한 얘기지만 국내에서 이를 이용한 것에 대한 문서가 전무했고 외국 웹 사이트를 찾다가 해결했다.(역시 구글신) 이 문제를 해결하기 위해 몇 번의 문서를 주고받으며 사람들이 해결책에 대해 얘기하고 있었고 결국 마지막 문서에서는 누군가가 해결법을 제시했다. b..

    정규식 예제

    정규식은 참 좋은 것 같다. 그러나 그떄 그때 정규식 짜는 것도 참 일이다.그래서 주로 쓰는 정규식 예제를 모아보았다. // IPv4 ^([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\.([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}$" // IPv6 ^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1..