본문 바로가기

반응형

IT

최대 접속자수를 늘리기 위한 윈도우 설정 윈도우를 기반으로 한 서버를 작업하면서 수많은 Connection의 연결, 끊기가 반복되는 와중에 TIME_WAIT 된 연결이 점점 증가하여 DDOS 를 당한 것처럼 클라이언트들과의 Connection을 더이상 연결하지 못하는 일이 발생하는 일이 생겼습니다. 레지스트리 수정을 하여 2가지를 추가하였습니다. 이미지부터 봅니다. 레지스트리 에디터를 작동시키고 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters' 까지 이동합니다. 위의 이미지에 보이는 2가지 항목이 없는 분도 계실 것이고 있는 분도 계실겁니다. 1. MaxUserPort - 32비트 DWORD값으로 최대 65534 (10진수)까지 입력할 수 있습니다. 소켓통신당 포트를.. 더보기
서버의 포트별 사용정보를 보여주는 간단한 자바 프로그램 이미지를 우선 보면 프로그램은 정말 간단히 작동합니다. 윈도우에서만 정상작동합니다. (윈도우의 'cmd.exe'를 사용하는 이유) 1초에 한번씩 14432포트와 8080포트에 대한 연결수를 검사하며, TW = TIME_WAIT를 포함한 모든 연결수, ES는 ESTABLISHED 상태의 연결수만 표시하는 것 입니다. MAX(14332)는 14332 포트의 ES값이 가장 큰 상태일 때를 별도로 저장해 놓은 것이고, MAX(8080)은 8080 포트의 ES값이 가장 큰 상태일 때를 별도로 저장해 놓은 것입니다. 소스를 첨부하오니 원하시면 수정하여 사용하시면 됩니다. 개인적으로 웹서버와 클라이언트와의 실시간 연결수, 웹서버와 DB간의 실시간 연결수를 측정하기 위해서 간단히 만들어 보았습니다. 이 파일은 실행파일.. 더보기
jxl 을 이용하여 cell에 데이터 입력하기 jxl을 이용하는 두번째 글로써 지금부터 진행하는 작업은 WritableWorkbook이 정상적으로 생성되어 준비가 된 상태라 생각하고 진행합니다. WritableWorkbook 생성에 대한 부분은 jxl (Java Excel Library) 를 이용한 기존 xls 파일을 복사하여 사용하기 란 글이나 기타 인터넷상의 글을 참고하시기 바랍니다. cell에 원하는 데이터를 입력하는 방법은 두가지가 있습니다. 하나는 cell 을 읽어와서 cell의 타입을 조사하고 해당 타입과 같은 수정가능한 데이터타입으로 형변환(Casting)을 거친후 set 메소드를 이용하여 데이터를 입력하는 방법이 있습니다. 저장할 데이터(jxl.write.*) 를 우선적으로 생성하고, WritableSheet에 데이터를 추가하는 방법이.. 더보기
AsyncTask 사용중 java.lang.ExceptionInInitializerError 처리방법 안드로이드에서 AsyncTask 관련 문서를 보면 중요한 내용중에 하나가 분명히 Main Thread 에서 실행되어야 한다는 것입니다. 그런데 안드로이드 개발을 하다보면 UI스레드를 얻기위해서 항상 Context를 파라메터등으로 넘겨주고 하는 고생(?)을 매번하게 됩니다. 간단히 Handler를 이용하여 UI스레드를 획득하여 제목에서 보이는 예외를 피하는 코드를 만들어 보겠습니다. // UI스레드에서 작동됩니다. new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { UserDefineTask task = new UserDefineTask(); task.execute(); } }); 어딜봐도 Contex.. 더보기
jxl (Java Excel Library) 를 이용한 기존 xls 파일을 복사하여 사용하기 개발중 정리된 정보를 excel 파일로 변환하여 데이터를 추출가공하는 부분이 있어서 정리합니다. 일반적으로 사용할 엑셀파일을 서식과 포맷을 정의한 temp 엑셀파일을 생성해서 저장후 이를 꺼내서 데이터만 cell 에 입력하고, 이파일을 저장하는 방법으로 많이 사용하게 됩니다. (직접적으로 cell 단위 서식까지 신경써가면서 작업하기에는 코딩이 너무 많아 집니다.) 하여~ 서식이 정의된 temp 엑셀파일(temp.xls로 하겠습니다.)을 복사하여 사용하는 방법을 적어보겠습니다. 간단한 테스트 코드이므로 응용하는 방식은 개발자에 따라 달라질 수 있습니다. (여기서는 제가 진행한 안드로이드 코드를 기반으로 합니다.) 위에 보이는 같이 적당한 곳에 서식이 정의된 temp_log.xls 파일을 저는 assets .. 더보기
SimpleDateFormat 사용시 java.lang.ArrayIndexOutOfBoundsException 멀티 쓰레드의 부하가 많이 걸리는 부분에 SimpleDateFormat을 사용하여 날짜를 특정한 포맷으로 변환하는 과정에서 java.lang.ArrayIndexOutOfBoundsException 이 발생하는 경우가 종종 있다. 부하가 많지 않은 경우에는 발생하지 않기는 하는데, 이유는 SimpleDateFormat이 none thread safe 하다는 것이 이유였다. 다시 구글링하여 얻은 정보. 위와 같은 이유로 이미 멋진 라이브러리가 이미 공개되어 있고, datetime과 관련된 다양한 메소드를 추가적으로 제공하는 Joda-Time 이라는 라이브러리를 찾을 수 있었다. 사이트 링크 : http://joda-time.sourceforge.net/ 예외가 발생하던 코드 if (obj instanceof.. 더보기
Juno 4.2 에서 Kepler 4.3 버전으로 업데이트 주의!! '업데이트 상황에서 발생할 수 있는 오류는 모두 업데이트를 실행하는 본인에게 있습니다.' 오랜만에 Juno 이후 Kepler가 나와서 오랜만에 업데이트를 진행하였습니다. 보통 하루 날잡아서 새로운 eclipse를 내려받고 그동안 하위버전에서 사용하던 플러그인과 환경설정을 그대로 복사, 붙여넣기 하듯이 업데이트를 진행하였습니다. 이것도 나쁘지 않은 게, 이전에 사용하던 개발환경이 삭제하기 전까지는 유지가 된다. 롤백하기 쉽다. 이정도 입니다. 하지만 정말 시간을 많이 잡아먹는 일이기도 합니다. 그래서 구글링 eclipse update 4.2 to 4.3 정도로 검색을 해보니 많은 정보가 있고, eclipse.org 홈페이지에서도 제공하는 방법이 있어서 적어봅니다. 참조 : http://stacko.. 더보기
앱 process 종료하기 안드로이드 프로그램을 프로세스 수준에서 완전히 중지하는 방법을 검색해보니 대부분 killProcess 방식으로 처리하는 것이 대부분이었습니다. 권장하지도 않는 방법이고, 단순히 프로그램 완전종료를 위해서 별도의 퍼미션을 추가해야 한다던지(관심없는 사용자들이 대부분이지만 말입니다.) 그다지 좋은 방법으로 보이지 않습니다. 해서 이것저것 해보다가 일단 저에게 맞는 방법을 찾아서 몇자 적어봅니다. 아래 이미지와 같이 eclipse를 통해서 프로그램을 실행하고 각 기기에서 프로그램을 처음 실행한 엑티비티까지 모두 onDestroy()를 탄 상황임에도 불구하고, 모두 프로세스는 그대로 남아있습니다. 사용했던 메모리도 그대로 보존하고 있죠.. 이녀석들이 도대체 언제 내려갈지 아무도 예측할 수 없습니다. 이래저래 몇.. 더보기

반응형