리눅스2012. 1. 9. 17:03

OS Bit확인
$getconf LONG_BIT

OS 계열확인
$cat /etc/issue

상세 OS확인
$cat /proc/version

CPU 정보 확인
$cat /proc/cpuinfo

RAM 용량 확인
$cat /proc/meminfo

DISK 용량 확인
$df -h

Posted by 미랭군
Web Application을 만들고 세션 관리를 적절하게 해주지 않고 세션 타임아웃을 무한으로 걸어놓고

시간이 조금 지나면 메모리가 풀이 나서 WAS가 죽어버리는 일이 종종 있다.

이런 문제를 미연에 방지하고 현재 세션 수가 얼마나 되는지 확인하기 위해서 세션 체크하는 리스너를 등록해보자.

HttpSessionListener를 상속받아 구현한 클래스를 만든다.

package com.test.java.listener;
 
import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 
public class SessionCounterListener implements HttpSessionListener {
   
 static private int activeSessions;
 
    public static int getActiveSessions() {
         return activeSessions;
     }
 
    @Override
     public void sessionCreated(HttpSessionEvent arg0) {
         activeSessions++;
         System.out.println("Created!! activeSessions : " + activeSessions);
     }
 
    @Override
     public void sessionDestroyed(HttpSessionEvent arg0) {
         activeSessions--;
         System.out.println("Destoryed!! activeSessions : " + activeSessions);
     }
 }

다음으로 web.xml에 리스너를 등록합니다.

 <listener>
  <listener-class>com.test.java.listener.SessionCounterListener</listener-class>
 </listener>

또한 세션 종료시간을 정합니다.

 <session-config>
        <session-timeout>15</session-timeout>
 </session-config>
Posted by 미랭군

보내는 스트링은 앞뒤를 식별가능한 고유 스트링으로 감싸야합니다.

예를 들어 쏘는 데이터를

var sendData:String = "<xxx>~~~~</xxx>"

라고 하면,  (* <xxx>와 </xxx>는 데이터 앞뒤를 구분하기 위해 임의로 붙임)

function onReceiveData(e:ProgressEvent):void
{
    var str:String = Socket(e.target).readMultiByte(Socket(e.target).bytesAvailable, "utf-8");
    parsingSocketData(str);
}

var socketStr:String; //조각난 데이터 저장 스트링
function parsingSocketData(str:String):void
{
    if (str.substr(0, 5) == "<xxx>")
    {
         socketStr = str;
    }
    else
    {
         socketStr += str;
    }

    if (socketStr.substr(-6, 6) == "</xxx>")
    {
         //socketStr :: 최종 데이터 완성
        //이후 데이터 처리
    }
}

와 같이 처리하면 아무리 큰 스트링이라도 처리 가능합니다.

그리고, 한가지 더.

오브젝트를 쏠 때도 마찬가지로 1600바이트 근처가면 데이터가 나눠져서 넘어가게 되는데..
오브젝트는 이 방식으로 체크하기가 편치가 않죠.
그럴때는 ObjectSerialization 같은 패키지를 구하셔서 object -> string으로 변환한뒤
위의 방식으로 쏘시고, 받고, 다시 object로 변환하시면 됩니다.

byteArray 같은 경우도 일단 compress해서 무리없이 넘어간다면 괜찮지만(byteArray는 무조건 compress하세요. byteArray만의 큰 매리트입니다), 에러가 발생한다면
readMultiByte 로 스트링으로 변환, 앞뒤 식별스트링 붙인 후 처리하시면 됩니다.

아 그리고 이 방식은 스트링이 처리하기가 가장 편하여 사용한 방식입니다. 기타 데이터포맷도 잘 다루시는 분이면 다른 테이터포맷으로 하셔도 무방합니다. ^^
Posted by 미랭군