블로그 이미지
Peter Note
Web & LLM FullStacker, Application Architecter, KnowHow Dispenser and Bike Rider

Publication

Category

Recent Post

2013. 7. 18. 10:08 Middleware, Cloud/WAS

JBoss 기동후 정상적으로 시작되었는지 확인해 보기위하여 server.log 또는 nohup.out 에서 "Started in" 로그를 체크한다. 하지만 간혹 해당 메세지가 안나올 경우도 있는데 이때는 ADMIN PORT (default: 8080)에 대해서 체크하도록 한다 



1. start, stop, status check shell

#!/bin/sh
#JBOSS start and stop script.
#rks2286(at)gmail(dot)com
#Sample script start and stop for jboss:
#-----------------------
#Changable texts JBOSS_ROOT, ADMIN_USERNAME, ADMIN_PASSWD, ADMIN_PORT, RMI_PORT, PROFILE.
#-----------------------
JBOSS_ROOT=/opt/jboss-eap-4.3/jboss-as/
ADMIN_USERNAME=admin
ADMIN_PASSWD=jbossadm
ADMIN_PORT=8080
RMI_PORT=1099
PROFILE=all
#---------------------
#JBOSS StartUp.....
#---------------------
export CLASSPATH
start() {
echo Starting jboss...;
echo Wait while the jboss server starts...;
$JBOSS_ROOT/bin/run.sh -c $PROFILE -b 0.0.0.0 > /tmp/null &
}
#-------------------
#JBOSS shutdown.....
#-------------------

stop() {
echo Stopping jboss..;
echo Wait while the jboss server stops;
$JBOSS_ROOT/bin/shutdown.sh -s `hostname`:$RMI_PORT -u $ADMIN_USERNAME -p $ADMIN_PASSWD &
}
status() {
echo Checking JBoss Status..
echo Wait for a while...
_up=`netstat -an | grep $ADMIN_PORT | grep -v grep | wc -l`

if [[ "${_up}" != "0" ]]; then
echo "###############################################"
echo "JBoss Application Server is Up!! And Running.!!"
echo "###############################################"
else
echo "##################################"
echo "JBoss Application Server is Down!!"
echo "##################################"
fi;
}

if [[ "${1}" == "start" ]];
then
start
elif [[ "${1}" == "stop" ]];
then
stop
elif [[ "${1}" == "status" ]];
then
status
else
echo "####################################################"
echo Usage:
echo export JBOSS_ROOT=Path_To_Root_Folder
echo .\/\jboss.sh start\|\stop;
echo Example:
echo export JBOSS_ROOT=\/\opt\/\jboss-eap-4.3\/\jboss-as;
echo ./jboss.sh start\|\stop;
echo "####################################################"
fi;
exit 0;


2. 수행 방법 

  - 해당 쉘이 jboss.sh 라면

  - 시작 : jboss.sh start

  - 종료 : jboss.sh stop

  - 정상 : jboss.sh status



<참조>

  - 원문 : start, stop, status shell script

posted by Peter Note
2013. 7. 10. 18:06 Middleware, Cloud/WAS

아파치<->제이보스로 연결되어 있고 업무 애플리케이션에서 큰 파일을 업로드하면서 아파치에서는 응답없음 메세지가 화면에 나타나고, 제이보스는 계속해서 파일업로드 처리를 하여 정상 종료되었을 경우 어디를 보아야 하는지 알아보자 



1. mod_jk 설정 찾기

  - 먼저 apache에 설정된 workers.properties 파일을 찾는다

  - socket_timeout 과 reply_timeout 설정 값을 확인한다



2. socket_timeout 의미

Socket timeout in seconds used for communication channel between JK and remote host. If remote host does not respond inside that timeout the JK will generate an error, and retry again. If set to value zero (default) the JK will wait for infinite on all socket operations. 

  - 초단위로 설정

  - JK와 리모트이니 여기서는 제이보스간의 연결

  - 제이보스에서 응답이 없으면 timeout 설정값에 따라 에러가 발생함

  - 0으로 설정하면 응답 올 때까지 socket 동작이 유지됨. 권장하지 않음 (참조)



3. reply_timeout 의미

 Reply_timeout property told webserver to wait some time for reply to a forwarded request before considering the remote tomcat is dead and eventually switch to another tomcat in a cluster group. 

  - 밀리초단위로 설정

  - 리모트 서버 -여기서는 제이보스가 다운되기 전까지- 아파치가 앞선 요청에 대하여 응답을 기다리는 시간

  - 만일 제이보스가 클러스터링 되어 있고 timeout이 발생하면 Live된 곳으로 요청이 재전송됨



4. 상황 및 튜닝

  - socket_timeout 300 초, reply_timeout 60 초 이면서 파일 업로드가 180초걸릴 경우

    + 아파치에서는 60초후 응답이 없으므로 브라우져로 응답이 없다고 에러를 클라이언트에게 던진다

    + 그러나 리모트 서버쪽의 socket은 300초까지 live 이므로 파일업로드는 정상적으로 수행하게 된다 

    + 클라이언트 입장에서는 브라우져에서 에러를 뱉어내니 에러인줄 알지만 실상은 서버에 정상적으로 업로드 되었다 


  - 파일 업로드 시간이 최대 180초 걸릴 경우

    + socket_timeout = 200 , reply_timeout = 200000 

    + 즉 각 timeout 값을 180초 이상 설정한다 



<참조> 

  - workers.properties 설정하기

  - socket_timeout과 reply_timeout의 의미

  - apache timeout 에 대하여 : 파일다운로드시

  - socket_timeout과 retry count에 대하여

posted by Peter Note
2013. 6. 5. 14:06 Middleware, Cloud/WAS

JBoss 나 WebLogic에서 Oracle을 연결할 때 Oracle이 RAC(Oracle Real Application Clustering)으로 구성이 되어 있다면 이에 맞는 DB Pool 설정을 해야한다 



1. Oracle Clustering Config

  - 환경설정

<connection-url>

jdbc:oracle:thin:@(description=(address_list=(load_balance=on)(failover=on)(address=(protocol=tcp)(host=host1)(port=1521))(address=(protocol=tcp)(host=host2)(port=1521)))(connect_data=(service_name=xxxxsid)(failover_mode=(type=select)(method=basic))))

</connection-url>



2. JBoss Config

  - 환경파일 : <domainName>/deploy/oracle-ds.xml 

 <datasources>

   <local-tx-datasource>

  <jndi-name>cmstDs</jndi-name> 

  <connection-url>

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST = (LOAD_BALANCE = off)(FAILOVER = on)(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 128.0.0.1)(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = PGTMO)(FAILOVER_MODE =    (TYPE = SELECT)(METHOD = BASIC))))

</connection-url> 

  <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> 

  <user-name>yun</user-name> 

  <password>dowon</password>


  <min-pool-size>30</min-pool-size>

  <max-pool-size>50</max-pool-size>


  <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>

  <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>


   <query-timeout>300</query-timeout>

   <background-validation-minutes>5</background-validation-minutes>

   <blocking-timeout-millis>10000</blocking-timeout-millis>


  </local-tx-datasource>

 </datasources>



3. Weblogic Config

  - 환경파일 : <domainName>/config/jdbc/xxxx-jdbc.xml

<?xml version='1.0' encoding='UTF-8'?>

<jdbc-data-source xmlns="http://xmlns.oracle.com/weblogic/jdbc-data-source" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/jdbc-data-source http://xmlns.oracle.com/weblogic/jdbc-data-source/1.2/jdbc-data-source.xsd">

  <name>youngsik-test</name>

  <jdbc-driver-params>

    <url>

jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=OFF)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=128.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=PGTMO)))

    </url>

    <driver-name>oracle.jdbc.OracleDriver</driver-name>

    <properties>

      <property>

        <name>SendStreamAsBlob</name>

        <value>true</value>

      </property>

      <property>

        <name>user</name>

        <value>MOBICON</value>

      </property>

      <property>

        <name>oracle.net.CONNECT_TIMEOUT</name>

        <value>10000</value>

      </property>

    </properties>

    <password-encrypted>dowon-manse</password-encrypted>

  </jdbc-driver-params>

  <jdbc-connection-pool-params>

    <initial-capacity>1</initial-capacity>

    <connection-creation-retry-frequency-seconds>10</connection-creation-retry-frequency-seconds>

    <test-frequency-seconds>120</test-frequency-seconds>

    <test-connections-on-reserve>true</test-connections-on-reserve>

    <test-table-name>SQL SELECT 1 FROM DUAL</test-table-name>

    <seconds-to-trust-an-idle-pool-connection>0</seconds-to-trust-an-idle-pool-connection>

  </jdbc-connection-pool-params>

  <jdbc-data-source-params>

    <jndi-name>jdbc/oracle/yun</jndi-name>

    <global-transactions-protocol>None</global-transactions-protocol>

  </jdbc-data-source-params>

</jdbc-data-source>



<참조>

  - Weblogic DB Configuration 이해하기

  - Oracle Cluster config

  - JBoss Deploy 및 ClassLoader구조와 Hibernate 사용하기 

  - JBoss 5 환경설정 및 튜닝 (필독)

posted by Peter Note
2013. 5. 29. 14:16 Middleware, Cloud/WAS

제이보스에서 버전별 Session 객체의 타임아웃 설정하는 곳은 어디일까?


1. 버전별 설정 위치 

  - 기본 설정사항 

JBoss 6.x

deploy/jbossweb.sar/web.xml

JBoss 5

deployers/jbossweb.deployer/web.xml

JBoss 4.3
deploy/jboss-web.deployer/conf/web.xml
Earlier versions

deploy/jbossweb-tomcat55.sar/conf/web.xml


    <!-- ==================== Default Session Configuration ================= -->

   <!-- You can set the default session timeout (in minutes) for all newly   -->
   <!-- created sessions by modifying the value below.                       -->

   <session-config>
      <session-timeout>30</session-timeout>
   </session-config>



2. 재설정 방법

  - 컨텍스트별 설정 변경

  - WEB-INF/web.xml 에 동일 태그로 설정한다.  (단위, min)

  - 값이 0 이면 영구적으로 보관 즉, WAS 재기동전까지...

Add the same tags as above to WEB-INF/web.xml.  Here is the DTD for further explanation:

<!--
The session-config element defines the session parameters for
this web application.

Used in: web-app
-->
<!ELEMENT session-config (session-timeout?)>

<!--
The session-timeout element defines the default session timeout
interval for all sessions created in this web application. The
specified timeout must be expressed in a whole number of minutes.
If the timeout is 0 or less, the container ensures the default
behaviour of sessions is never to time out.

Used in: session-config
--> 

<!ELEMENT session-timeout (#PCDATA)>


  - 또는 애플리케이션에서 호출해도 된다. 

    + 만일 web.xml 설정을 해도 제대로 동작되지 않으면 하드코딩 되어 있는지 확인한다 (참조1 , 참조2)

    + 해당 코드를 넣으면 전역으로 반영이 된다

HttpSession.setMaxInactiveInterval(int seconds)



<참조>

  - 원문 : 세션 Timeout 설정

  - 세션 Timeout 설정하기 정리

posted by Peter Note
2013. 5. 15. 15:25 Middleware, Cloud/WAS

1. JBoss 5.1 has the following Thread Pools

  • System Thread Pool
  • HTTP Thread Pool
  • AJP Thread Pool
  • JCA Thread Pool(Work Manager Thread Pool)
  • JBoss Messaging Thread Pool (for remote clients)
  • JBoss Messaging Thread Pool (in JVM Clients)
  • EJB (same JVM)
  • EJB (remote Clients)

2. Port 정보 

TCP    10.2.20.156:1090       <--- RMI/JRMP socket for connecting to the JMX MBeanServer
TCP    10.2.20.156:1091       <--- RMI server socket
TCP    10.2.20.156:1099       <--- JNDI Service
TCP    10.2.20.156:1098       <--- RMI Port for JNDI Service
TCP    10.2.20.156:4446       <--- JBoss Remoting Connector
TCP    10.2.20.156:4712       <--- JBossTS Service
TCP    10.2.20.156:4713       <--- JBossTS Service
TCP    10.2.20.156:5445       <--- HornetQ JMS Service
TCP    10.2.20.156:5455       <--- HornetQ Netty port
TCP    10.2.20.156:5500       <--- JBoss Remoting
TCP    10.2.20.156:5501       <--- JBoss Remoting ssl
TCP    10.2.20.156:8009       <--- Web server AjpConnector
TCP    10.2.20.156:8080       <--- Web server HTTP Connector
TCP    10.2.20.156:8083       <--- Web services

 

<참조> 

  - http://zeroproductionincidents.wordpress.com/tag/jboss-thread-pool/

  - http://www.mastertheboss.com/jboss-configuration/jboss-port-configuration

posted by Peter Note
2013. 2. 20. 17:36 Middleware, Cloud/Linux

로그 백업을 위하여 crontab에 등록할 Bash Shell를 작업하려 한다. 익혀간 과정을 적어보자 


1) Backup 가정

  - 3일전 로그를 압축한다.

  - 여러개의 로그파일이 다양한 위치에 존재한다

  - 압축된 로그파일은 년/월 별도 디렉토리로 이동하여 관리한다

  - 작은 업무 시스템별로 로그의 위치가 틀리다 (단, 작은 업무 시스템안에 디렉토리는 고정임)


2) 3일전 로그찾기 

  - 몇일전 날짜를 찾는 문법 (참조)

####################################################

# 1) output is 3 days ago 

# backup directory name : backup_YYYY-MM in log files

# 3일전 파일을 찾는다 

YYYYMMDD=`date +%Y%m%d --date '3 days ago'`

DATE="${YYYYMMDD:0:4}-${YYYYMMDD:4:2}-${YYYYMMDD:6:2}"

BK_DIR="backup_${YYYYMMDD:0:4}-${YYYYMMDD:4:2}"

GZIP_CNT="0"


echo ""

echo "===============================[Backup Start]============================="

echo "<< Start Time: "`date '+%F  %r'`" >>"

echo "-- Backup File Date : $DATE, Backup Dir : $BK_DIR"


3) 여러개의 로그파일이 다양한 위치에 존재함

  - 지정한 디렉토리에 파일이 있으면 gzip으로 압축한다

####################################################

# 2) run gzip for log files

# ${1} : directory full path

# ${2} : file name

function mkdir_function()

{

  if [ ! -d ${1} ]; then

    echo "  make dir : ${1}"

    mkdir ${1}

  fi

}


# backup_YYYY-MM 디렉토리가 없으면 만들고 .gz  압축파일을 월별로 관리한다 

function mv_file_function()

{

  mkdir_function "${1}/$BK_DIR"


  echo "  move : ${1}/${2}.gz to ${1}/$BK_DIR"

  mv ${1}/${2}.gz ${1}/$BK_DIR/

}


# ${1} : directory full path

# ${2} : file name

# 지정된 파일만 압축 

function gzip_function() 

{

  if [ -e ${1}/${2} ]; then

    cd "${1}"    

    echo "  gzip : ${1}/${2}"


    gzip ${1}/${2}


    mv_file_function "${1}" "${2}"  


    GZIP_CNT=`expr $GZIP_CNT + 1` 

  fi

}


# for time loop gzip

# 3일 이전의 모든 파일들 

function gzip_loop_function()

{

  cd "${1}"

  for file in `find -type f -mtime +3`; do

     local FNAME="${file:2}"

     local EXT="${FNAME##*.}"

     if [ "$EXT" != "" ] && [ "$EXT" != "gz" ] && [ "$EXT" != "sh" ]; then

        gzip_function "${1}" "${FNAME}"

     fi

  done

}


4) 업무 단위 시스템별로 로그의 위치 지정 : 로그 지정하여 압축 수행함 

  echo "-- [START] ${JDOMAIN} backup : TX.xml & Error.xml log"

  gzip_function "/tmp/logs" "Transactions.log.$DATE"

  gzip_function "/tmp/logs" "Error.log.$DATE"


  # gc old log

  echo "-- [START] ${JDOMAIN} backup : old gclog log"

  gzip_loop_function "/tmp/logs/$JDOMAIN/old/gclog"

 

  # nohup old log

  echo "-- [START] ${JDOMAIN} backup : old nohup log"

  gzip_loop_function "/tmp/logs/$JDOMAIN/old/nohup"


5) 전체 Shell Script


<참조>

  - 백업받을 디렉토리를 만들어야 하는 경우 : 하기 내용은 function을 이용한 참조 내역임 (다른 유사 참조)

  - Bash Shell 문법을 익혀보자 (참조)

  - Bash Shell 문법 : 옵션 잘 설명됨 (참조)

posted by Peter Note
prev 1 next