블로그 이미지
윤영식
Full Stacker, 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 윤영식
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 윤영식
2013. 7. 9. 18:02 Middleware, Cloud/WAS

Apache-WebLogic간의 연결시 Timeout 설정에 대한 부분을 체크해 보자.


1. Apache-WebLogic간의 연결

  - AJP를 사용하지 않고 직접 WebLogic module을 httpd.conf 에 설정한다 (참조)

  - 환경설정 예

LoadModule weblogic_module    modules/mod_wl_22.so


<Location /services>
    SetHandler weblogic-handler
</Location>

<IfModule mod_weblogic.c>
WebLogicCluster 127.0.0.1:8881,127.0.0.1:8882
MatchExpression *.jsp
Idempotent OFF
DynamicServerList OFF
KeepAliveEnabled OFF
ConnectTimeoutSecs 16
ConnectRetrySecs 2
FileCaching OFF
</IfModule>



2. Apache Timeout 설정

  - ajp 연결이 아니므로 workers.properties의 socket_timeout 또는 reply_timeout과 관련이 없다

  - apache/httpd/conf/extra/httpd-default.conf의 Timeout 과 관련 (참조)

Timeout 300
클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와 서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을 초단위로 설정. 초기값은 1200초(20분)이며 보통은 300초(5분)로 지정한다. 네트워크의 속도가 나쁠수록 수치값은 높게 설정하는 것이 좋다.



3. WebLogic Timeout 설정

  - httpd.conf에 timeout 관련 설정을 한다

  - WebLogic안에서 request<->response에 대한 직접적인 처리 - WLIOTimeoutSecs 설정 (참조1, 참조2)

WLIOTimeoutSecs 300

  - default : 300 초

  - 웹로직으로 request를 보내고 response를 받기 위해서 대기하는 시간

  - post 방식으로 대량의 데이터를 WebLogic으로 보낼 때 timeout이 발생하면 plug-ins에 "POST_TIMEOUT"에러가 발생한다


  - WebLogic을 클러스터링 환경으로 구성하였을 경우는 idempotent 환경에 대하여 고려한다. (참조)

Idempotent OFF

  - WebLogic서버로 부터 request전송시 에러가 발생하거나, 서버로부터 결과를 기다리는 중에
     위에 정의된 WLIOTimeoutSecs 시간 초과되어서 에러 발생시 요청을 다시 보낼 것인가를 지정.
  - 서버와 연결은 되었는데 그 이후에 에러가 발생 하였을 경우 해당 옵션이 ON이면 다시 연결을 시도하고
    요청을 보내게 되므로 중복 요청의 가능성이 있다. OFF권장.


posted by 윤영식
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 윤영식
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 윤영식
2013. 5. 21. 17:08 Middleware, Cloud/WAS

OOM(OutOfMemory) 에러가 발생하거나 Heap Dump 로그를 떨구고서 WAS가 죽을 경우 메모리설정에 대한 이슈를 어떻게 해결할지 알아보자 


1) JVM 메모리 운영

  - Heap = Young Generation + Old Generation + Permanent Generation(PermSize=MethodArea)

    + Young 에서 신규 생성되어 오래된 객체가 Old로 넘어감

    + Young 에서 바로 사용되지 않으면 Minor GC

    + Old로 넘어간 후 Old에서 더 이상 사용되지 않으면 Full GC

    + Perm 영역은 상수영역으로 GC 대상은 아니나 간혹 일어남


  - Young Generation = Eden + Survivor (2개)  로 구성

    + Eden 에서 사용되어진 것은 Survivor로 넘어가고 다시 Old 영역으로 넘겨진다  



2) jstat 명령을 통한 GC 모니터링

  - $JDK_HOME/bin/jstat 명령어 이용 

  - jstat 옵션들 : 출처 (http://helloworld.naver.com/helloworld/helloworld/6043)

옵션

기능

gc

각 힙(heap) 영역의 현재 크기와 현재 사용량(Eden 영역, Survivor 영역, Old 영역등), 총 GC 수행 횟수, 누적 GC 소요 시간을 보여 준다.

gccapactiy

각 힙 영역의 최소 크기(ms), 최대 크기(mx), 현재 크기, 각 영역별 GC 수행 횟수를 알 수 있는 정보를 보여 준다. 단, 현재 사용량과 누적 GC 소요 시간은 알 수 없다.

gccause

-gcutil 옵션이 제공하는 정보와 함께 마지막 GC 원인과 현재 발생하고 있는 GC의 원인을 알 수 있는 정보를 보여 준다.

gcnew

New 영역에 대한 GC 수행 정보를 보여 준다.

gcnewcapacity

New 영역의 크기에 대한 통계 정보를 보여 준다.

gcold

Old 영역에 대한 GC 수행 정보를 보여 준다.

gcoldcapacity

Old 영역의 크기에 대한 통계 정보를 보여 준다.

gcpermcapacity

Permanent 영역에 대한 통계 정보를 보여 준다.

gcutil

각 힙 영역에 대한 사용 정도를 백분율로 보여 준다. 아울러 총 GC 수행 횟수와 누적 GC 시간을 알 수 있다.


  - gcutil / gccapcity 사용 예

    + gcutil : WAS 기동후 FGC(Full GC 건수)는  230회 발생하였고, FGCT(Full GC 수행시간)은 2302초로 거의 10초가 소요되었다

                 Full GC 수행마다 10초의 시간

    + gccapacity : New 영역 사용크기(NGCMN) 이 2,097,152 (즉 2Gbytes)이고 Old 영역 사용크기(OGCMN)가 3,145,728 (즉 3GBytes) 가량이 된다 

[jboss@dowon ~]$ ps -ef |grep java

jboss    13090 13053  8 Mar27 ?        04:28:28 /usr/java/jdk1.6.0_31/bin/java -Dprogram.name=run.sh -server .. 중략..


[jboss@dowon ~]$ jstat -gcutil 13090

  S0     S1     E        O       P     YGC   YGCT    FGC   FGCT      GCT   

  0.76   0.00  85.57  86.24  26.88   1260  644.013   230   2302.259   2946.273


[jboss@dowon ~]$ jstat -gccapacity 13090

 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC      PGCMN    PGCMX     PGC       PC     YGC    FGC 

2097152.0 2097152.0 2097152.0 430656.0 412096.0 1254400.0  3145728.0  3145728.0  3145728.0  3145728.0 524288.0 524288.0 524288.0 524288.0   1260   230


  - 간단한  GC Check Shell Script 작성해 보았다 

    + weblogic.Server (jboss: org.jboss.Main) 부분을 WAS나 JAVA Process 환경에 맞게 변경하여 사용한다

    + WAS가 기동된 이후 Full GC 평균 시간 = FGCT/FGC  : 만일 3초이상이면 점검 대상으로 지정

#!/bin/sh


# [GC Statistics after WAS started]

# config

#   interval : 3 sec

#   count : 2


echo ""

echo "[GC statistics after WAS is started]"

echo "----------------------------------------"

echo " S0/S1: Survivor 0/1 (KB)"

echo " E    : Eden (KB)"

echo " O    : Old area size (KB)"

echo " P    : Permanent area size (KB)"

echo " YGC  : Young Generation GC Count"

echo " YGCT : Young Generation GC Total Time"

echo " FGC  : Full GC Count"

echo " FGCT : Full GC Total Time"

echo " GCT  : GC Total Time"


echo "----------------------------------------"

echo ""

echo " HostName : " $(hostname)

echo ""

for PID in  `ps -ef | grep java | egrep -v grep | grep weblogic.Server | awk -F" " '{print $2}'`

do

echo " WAS PID  : " $PID

echo "----------------------------------------------------------------------------"

jstat -gcutil $PID 3000 2

echo "----------------------------------------------------------------------------"

echo ""

done

echo ""


결과

===========================================

 HostName :  jupitorDowon


 WAS PID  :  355343

----------------------------------------------------------------------------

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   

  0.00   0.00  52.68  13.52  31.58   3764   30.408  1878 1148.863 1179.271

  0.00   0.00  52.69  13.52  31.58   3764   30.408  1878 1148.863 1179.271

----------------------------------------------------------------------------


  - 컬럼 출력 내용 : 출처 (http://helloworld.naver.com/helloworld/helloworld/6043)

칼럼

설명

jstat 옵션

S0C

Survivor 0 영역의 현재 크기를 KB 단위로 표시

-gc

-gccapacity

-gcnew

-gcnewcapacity

S1C

Survivor 1 영역의 현재 크기를 KB 단위로 표시

-gc

-gccapacity

-gcnew

-gcnewcapacity

S0U

Survivor 0 영역의 현재 사용량을 KB 단위로 표시

-gc

-gcnew

S1U

Survivor 1 영역의 현재 사용량을 KB 단위로 표시

-gc

-gcnew

EC

Eden 영역의 현재 크기를 KB 단위로 표시

-gc

-gccapacity

-gcnew

-gcnewcapacity

EU

Eden 영역의 현재 사용량을KB 단위로 표시

-gc

-gcnew

OC

Old 영역의 현재 크기를 KB 단위로 표시

-gc

-gccapacity

-gcold

-gcoldcapacity

OU

Old 영역의 현재 사용량을KB 단위로 표시

-gc

-gcold

PC

Permanent영역의 현재 크기를 KB 단위로 표시

-gc

-gccapacity

-gcold

-gcoldcapacity

-gcpermcapacity

PU

Permanent영역의 현재 사용량을KB 단위로 표시

-gc

-gcold

YGC

Young Generation의 GC 이벤트 발생 횟수

-gc

-gccapacity

-gcnew

-gcnewcapacity

-gcold

-gcoldcapacity

-gcpermcapacity

-gcutil

-gccause

YGCT

Yong Generation의 GC 수행 누적 시간

-gc

-gcnew

-gcutil

-gccause

FGC

Full GC 이벤트가 발생한 횟수

-gc

-gccapacity

-gcnew

-gcnewcapacity

-gcold

-gcoldcapacity

-gcpermcapacity

-gcutil

-gccause

FGCT

Full GC 수행 누적 시간

-gc

-gcold

-gcoldcapacity

-gcpermcapacity

-gcutil

-gccause

GCT

전체 GC 수행 누적 시간

-gc

-gcold

-gcoldcapacity

-gcpermcapacity

-gcutil

-gccause

NGCMN

New Generation의 최소 크기를 KB단위로 표시

-gccapacity

-gcnewcapacity

NGCMX

New Generation의 최대 크기를 KB단위로 표시

-gccapacity

-gcnewcapacity

NGC

New Generation의 현재 크기를 KB단위로 표시

-gccapacity

-gcnewcapacity

OGCMN

Old Generation의 최소 크기를 KB단위로 표시

-gccapacity

-gcoldcapacity

OGCMX

Old Generation의 최대 크기를 KB단위로 표시

-gccapacity

-gcoldcapacity

OGC

Old Generation의 현재 크기를 KB단위로 표시

-gccapacity

-gcoldcapacity

PGCMN

Permanent Generation의 최소 크기를 KB단위로 표시

-gccapacity

-gcpermcapacity

PGCMX

Permanent Generation의 최대 크기를 KB단위로 표시

-gccapacity

-gcpermcapacity

PGC

현재 Permanent Generation의 크기를 KB단위로 표시

-gccapacity

-gcpermcapacity

PC

Permanent 영역의 현재 크기를 KB단위로 표시

-gccapacity

-gcpermcapacity

PU

Permanent 영역의 현재 사용량을 KB단위로 표시

-gc

-gcold

LGCC

지난 GC의 발생 이유

-gccause

GCC

현재 GC의 발생 이유

-gccause

TT

Tenuring threshold. Young 영역 내에서 이 횟수만큼 복사되었을 경우(S0 ->S1, S1->S0) Old 영역으로 이동

-gcnew

MTT

최대 Tenuring threshold. Yong 영역 내에서 이 횟수만큼 복사되었을 경우 Old 영역으로 이동

-gcnew

DSS

적절한 Survivor 영역의 크기를 KB단위로 표시

-gcnew



3) verbose:gc 옵션을 통한 GC 모니터링

  - WAS 기동 Shell에 verbose:gc 옵션을 준다

    + GC에 대해 자세히 시간을 찍도록 한다

    + 로그위치와 명칭을 지정한다

-verbose:gc 

-Xloggc:/applog/cmsmDomain/gclog/gc.log 

-XX:+PrintGCDetails 

-XX:+PrintGCTimeStamps 

-XX:+PrintHeapAtGC 

-XX:+HeapDumpOnOutOfMemoryError 

-XX:HeapDumpPath=/applog/cmsmDomain/gclog/java_pid.hprof 


  - 로그 출력 예

// Full GC

7210.826: [Full GC (System) [PSYoungGen: 23616K->0K(1947520K)] [PSOldGen: 886563K->856929K(3145728K)] 910179K->856929K(5093248K) [PSPermGen: 138064K->138064K(524288K)], 2.9391980 secs] [Times: user=2.98 sys=0.00, real=2.94 secs]

Heap after GC invocations=52 (full 3):

 PSYoungGen      total 1947520K, used 0K [0x0000000780000000, 0x0000000800000000, 0x0000000800000000)

  eden space 1801536K, 0% used [0x0000000780000000,0x0000000780000000,0x00000007edf50000)

  from space 145984K, 0% used [0x00000007edf50000,0x00000007edf50000,0x00000007f6de0000)

  to   space 141376K, 0% used [0x00000007f75f0000,0x00000007f75f0000,0x0000000800000000)

 PSOldGen        total 3145728K, used 856929K [0x00000006c0000000, 0x0000000780000000, 0x0000000780000000)

  object space 3145728K, 27% used [0x00000006c0000000,0x00000006f44d8428,0x0000000780000000)

 PSPermGen       total 524288K, used 138064K [0x00000006a0000000, 0x00000006c0000000, 0x00000006c0000000)

  object space 524288K, 26% used [0x00000006a0000000,0x00000006a86d41d8,0x00000006c0000000)

}

// Minor GC

10500.769: [GC [PSYoungGen: 1769535K->35007K(1928320K)] 2645761K->912640K(5074048K), 0.0958040 secs] [Times: user=0.17 sys=0.00, real=0.09 secs]

Heap after GC invocations=67 (full 3):

 PSYoungGen      total 1928320K, used 35007K [0x0000000780000000, 0x0000000800000000, 0x0000000800000000)

  eden space 1754816K, 0% used [0x0000000780000000,0x0000000780000000,0x00000007eb1b0000)

  from space 173504K, 20% used [0x00000007f5690000,0x00000007f78bff00,0x0000000800000000)

  to   space 168832K, 0% used [0x00000007eb1b0000,0x00000007eb1b0000,0x00000007f5690000)

 PSOldGen        total 3145728K, used 877632K [0x00000006c0000000, 0x0000000780000000, 0x0000000780000000)

  object space 3145728K, 27% used [0x00000006c0000000,0x00000006f59101d8,0x0000000780000000)

 PSPermGen       total 524288K, used 138386K [0x00000006a0000000, 0x00000006c0000000, 0x00000006c0000000)

  object space 524288K, 26% used [0x00000006a0000000,0x00000006a8724880,0x00000006c0000000)

}



4) 튜닝하기 

  - WAS 기동 Shell의 기본옵션

    + -Xms -Xmx 힙사이즈 지정

    + -server 옵션 지정

    GC 튜닝 시 기본적으로 학인해야 하는 JVM 옵션 (출처: http://helloworld.naver.com/helloworld/37111)

구분

옵션

설명

힙(heap) 영역 크기

-Xms

JVM 시작 시 힙 영역 크기

-Xmx

최대 힙 영역 크기

New 영역의 크기

-XX:NewRatio

New영역과 Old 영역의 비율

-XX:NewSize

New영역의 크기

-XX:SurvivorRatio

Eden 영역과 Survivor 영역의 비율


  - 설정 예 

/usr/java/jdk1.6.0_31/bin/java 

-server 

-Xms5120m -Xmx5120m 

-XX:NewSize=2048m 

-XX:MaxNewSize=2048m 

-XX:PermSize=512m 

-XX:MaxPermSize=512m 


-Xss5m 

-verbose:gc 

-Xloggc:/applog/cmsmDomain/gclog/gc.log 

-XX:+PrintGCDetails 

-XX:+PrintGCTimeStamps 

-XX:+PrintHeapAtGC 

-XX:+HeapDumpOnOutOfMemoryError 

-XX:HeapDumpPath=/applog/cmsmDomain/gclog/java_pid.hprof 


  - 다음의 경우 튜닝이 필요없다. 단 이것은 서비스의 특성에 따라 틀리다. 해당 시간 이상이면 튜닝 대상

  • Minor GC 처리 시간이 빠르다(50ms내외).
  • Minor GC 주기가 빈번하지 않다(10 내외).
  • Full GC 처리 시간이 빠르다(보통1 이내).
  • Full GC 주기가 빈번하지 않다(10분에 1).


  - Full GC 수행 시간과 수행 간격 조사 => Minor GC 수행 시간과 수행 간격 조사 => 전체 평균값 및 수행 횟수등을 조사하여 튠이 필요성을 판단한다 


  - 메모리 설정 옵션을 조정하면서 결정한다

    + 힙사이즈가 크면 GC 시간도 올래 걸린다 : 그만큼 많은 객체가 쌓여 있을 것이므로 

    + 따라서 무조건 크게 잡는다고 해서 좋은 것은 아니므로 적정사이즈를 찾아가는 것이 중요하다 

    + NewRatio=2 는 New Generation:Old Generation = 1:2 비율 사이즈로 사용크기를 지정하는 것임 (-Xmx 사이즈에 대해서)

      즉, NewRatio=4 이면 New:Old=1:4 비율의 크기임


  - 튜닝 예 1)

    + jstat -gccapacity의 New영역 사용크기(NGCMN)과 Old영역 사용크기(OGCMN) 값의 비율을 체크한다 

      NGCMN:OGCMN = 2:3 (Gbytes)

    + NewRatio=2 => 3 => 4 로 바꾸어 가면서 Full/Minor GC 평균응답시간을 구한다 (jstat -gctuil로 구함)


  - 튜닝 예 2)

    + verbose:gc 로그가 남으면 HP JMeter를 통하여 분석한다

    + JMeter를 통하여 Duration 발생 간격을 측정하거나 GC 소요 시간을 그래프 형태로 볼 수 있다. 

    + 여러 옵션을 차례로 처음 몇개에만 적용해 보고 jstat -gcutil 을 통하여 통계값을 얻고 최적치를 측정해 나간다 

  • Case1 : -XX:+UseParallelGC -Xms1536m -Xmx1536m -XX:NewRatio=2
  • Case2 : -XX:+UseParallelGC -Xms1536m -Xmx1536m -XX:NewRatio=3
  • Case3 : -XX:+UseParallelGC -Xms1g -Xmx1g -XX:NewRatio=3
  • Case4 : -XX:+UseParallelOldGC -Xms1536m -Xmx1536m -XX:NewRatio=2
  • Case5 : -XX:+UseParallelOldGC -Xms1536m -Xmx1536m -XX:NewRatio=3
  • Case6 : -XX:+UseParallelOldGC -Xms1g -Xmx1g -XX:NewRatio=3

 

위의 모든 내용은 HelloWorld의 연재글을 통하여 현재 운영하고 있는 JBoss의 GC 분석을 수행할 예정이다. 이자리를 빌어 이상민님에게 감사를 드린다. 또한 사전 허락없이 옵션 테이블을 인용하였고 만일 문제가 된다면 바로 삭제토록 할 예정이다. 



<참조>

  - GC 에 대한 이해 

    + Young:Old 영역에 대한 이해 : http://helloworld.naver.com/helloworld/1329

    + GC 모니터링 방법 -verbose:gc : http://helloworld.naver.com/helloworld/helloworld/6043


  - GC 튜닝 가이드 : http://helloworld.naver.com/helloworld/37111

  - jstat 사용예제 : https://community.jboss.org/thread/159052

posted by 윤영식
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 윤영식
2013. 4. 1. 11:20 Middleware, Cloud/WAS

JVM에서 Thread Dump는 현재 수행중인 쓰레드에 대한 호출경로 StackTrace를 보기 위한 것이고 Heap Dump는 현재 Heap에서 점유되고 있는 객체들에 대한 조사를 위하여 필요한 내역이다 



1. Thread Dump 수행


  - 명령 : kill -3 <pid> 

  - <pid> 는 JVM의 process ID 이다 

  - Thread Dump 내역을 통하여 Thread ID와 호출에 대한 추적을 할 수 있다 

Full Java thread dump with locks info

"ZipFile Lock Reaper" Id=1826 in TIMED_WAITING on lock=java.util.TaskQueue@76a7850e

at java.lang.Object.wait(Native Method)

at java.util.TimerThread.mainLoop(Timer.java:509)

at java.util.TimerThread.run(Timer.java:462)


Locked synchronizers: count = 0


"ajp-0.0.0.0-8009-20" Id=1323 in WAITING on lock=org.apache.tomcat.util.net.AprEndpoint$Worker@12a2bc0f

at java.lang.Object.wait(Native Method)

at java.lang.Object.wait(Object.java:485)

at org.apache.tomcat.util.net.AprEndpoint$Worker.await(AprEndpoint.java:1989)

at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:2014)

at java.lang.Thread.run(Thread.java:662)


Locked synchronizers: count = 0


"ajp-0.0.0.0-8009-19" Id=1321 in RUNNABLE (running in native)

at org.apache.tomcat.jni.Socket.recvbb(Native Method)

at org.apache.coyote.ajp.AjpAprProcessor.readt(AjpAprProcessor.java:1072)

at org.apache.coyote.ajp.AjpAprProcessor.readMessage(AjpAprProcessor.java:1163)

at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:368)

at org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:425)

at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:2036)

at java.lang.Thread.run(Thread.java:662)

... 중략 ..




2. Heap Dump 수행


  - JVM GC 블로깅에서 Old영역을 많이 사용할 경우 일반적으로 사용되지 않는 객체들이 Reference되어 GC되지 않고 남아 있을 가능성이 높다. 이때는 어떤 객체들이 많이 점유되고 있는지 조사할 필요가 있다

  - 즉, Old 영역을 많이 점유하고 있으면 Full GC가 자주 오래동안 발생할 수 있으므로 업무 응답시간에 문제 또는 장애를 일으킬 소지가 있다

  - JDK6 명령 : jmap -dump:format=b,file=<fileName> <PID>    

  - jmap은 JDK_HOME/bin 에 포함되어 있음




3. Heap Dump 분석

 

  - Eclipse Memory Analyzer Tool (mat) 을 이용한다

  - 독립 프로그램 다운로드 : Heap Dump Size는 몇 Gbytes 씩 되므로 64bit OS 에서 64bit mat 를 다운로드 받는다

  - MemoryAnalyzerTool.ini 파일의 초기값 설정을 Heap Dump 파일 사이즈에 따라 적절히 한다

    + 내 경우 : -Xms2048m -Xmx8192m (Heap Dump file size 6Gbytes 일때) 

-XX:MaxPermSize=256m

-Xms40m

-Xmx512m


  - mat에서 Heap Dump 파일을 로딩한다. 이때 파일 확장자는 .hprof 여야 한다. 

    6Gbytes 로딩에 대략 수시간이 소요되니 인내심이 필요 하다  

  - mat 통하여 Heap Dump 분석할 때 로컬 메모리가 부족할 경우 Swap Size를 확장하여 준다 (스왑 설정하기)



<참조>

  - OOM 발생에 대한 고찰

  - Heap Dump 생성하기

  - Eclipse Memory Analyzer Tool Download

  - JHat 분석툴, JVisualVM 분석툴 (jdk1.6제공)

posted by 윤영식
2012. 11. 26. 10:59 Middleware, Cloud/WAS

JBoss의 deploy와 deployer 디렉토리의 차이는 무엇을까? 들여다 보면 xml과 서브 디렉토리가 존재한다. 



deploy는 배포되는 애플리케이션과 jboss 서비스들이 위치한곳, deployer는 그러한 것들을 deploy하는 관련 내역을 설정한 것 정도가 아닐까 싶다. micro container가 OSGi container 개념과 유사하게 이해 하면 되겠다. 


posted by 윤영식
2012. 10. 25. 16:31 Middleware, Cloud/WAS

하이퍼소닉은 애플리케이션 테스트용으로 사용하는 것으로 실 운영시에는 적은 메모리라도 아끼기 위하여 삭제하는 것이 좋다. 하이퍼소닉은 외부 접근이 안되므로 보안에 대한  설정은 없지만 운영들어 가기전에 삭제한다


  • deploy> 밑에서 ls *ds.xml 검색하면 hsqldb-ds.xml 파일이 나온다 
  • hsqldb-ds.xml 파일을 삭제한다 

하이퍼소닉을 제거한후 oracle을 사용한다면 다음과 같은 서비스에 설정을 변경하여 준다. 

  • deploy 밑에 oracle-ds.xml 파일을 만든다 
  • DefaultDS를 사용하고 있는 ejb2-timer-service.xml의 설정을 oracle로 변경한다
  • JMS를 사용하면 deploy/messaging/hsqldb-persistence-service.xml 파일을 지우고 동일한 oracle-persistence-service.xml 파일을 만든다
  • uuid-key-generator.sar에서 UUID 키 생성을 한다면 META-INF/jboss-service.xml 에서 DefaultDS를 변경한다 
만일 새로운 데이터베이스로 서비스를 전환했다면 

show tables in jbossdb; 로 사용하는 테이블들을 점검 한다 


posted by 윤영식
2012. 10. 25. 16:12 Middleware, Cloud/WAS

Java Messaging Service를 사용하지 않는 다면 다음의 파일 또는 내용을 제거 하여 자원(메모리, CPU) 소모를 예방한다


  • deploy/messaging 디렉토리 삭제
  • deploy/jms-ra.rar 파일 삭제
  • deployers/messaging-definitions-jboss-beans.xml 파일 삭제
  • conf/standardjboss.xml 파일에서 jms 관련 내용 제거 

메시징을 이용한다면 

  • deploy/messaging/destinations-service.xml 안에 <security>를 설정한다
  • conf/login-config.xml 파일에 <application-policy name="JMSRealm"> 이라는 새로운 application 정책을 만든다 
  • 마지막으로 deploy/messaging/messaging-jboss-beans.xml 안에 <bean name="SecurityStore">를 설정한다 


posted by 윤영식
2012. 10. 25. 16:02 Middleware, Cloud/WAS

▶ shutdown이나 twiddle이 JBoss의 내부 마이크로 커널과 통신하려면 JMX invoker를 사용한다.


  • deploy/jmx-invoker-service.xml 구성에서 org.jboss.invocation.Invocation 에 대한 인증 인터셉터를 추가한다
         <operation>
            <description>The detached invoker entry point</description>
            <name>invoke</name>
            <parameter>
               <description>The method invocation context</description>
               <name>invocation</name>
               <type>org.jboss.invocation.Invocation</type>
            </parameter>
            <return-type>java.lang.Object</return-type>
            <descriptors>
               <interceptors>
                  <!-- Interceptor to require authenticated users -->
                  <interceptor code="org.jboss.jmx.connector.invoker.AuthenticationInterceptor"
                     securityDomain="java:/jaas/jmx-console"/>
                  <!-- Interceptor that deals with non-serializable results -->
                  <interceptor code="org.jboss.jmx.connector.invoker.SerializableInterceptor"
                     policyClass="StripModelMBeanInfoPolicy"/>
               </interceptors>
            </descriptors>
         </operation>

해당 조건을 적용하면 단순 shutdown 명령이 내리지 않고 하기와 같이 한다

 bin> shutdown -S -s jnp://<IP> -u admin -p <admin 패스워드>

  • jnp 프로토콜 접속하는 JBoss 설치 IP (옵션)
  • -u 인증 admin 아이디 
  • -p admin 계정의 패스워드 



▶ HTTP Invoker 는 80 포트를 통해서 외부세계에서 JBoss의 JNDI, JMX invocation, EJB invocation등의 원격 접속을 허용한다. 


  • 80 포트는 애플리케이션을 요청하는 포트 이므로 HTTP Invoker는 아예 삭제를 한다
  • deploy/http-invoker.sar라는 단일 서비스를 디렉토리 몽땅 제거하면 서비스가 삭제된다





posted by 윤영식
2012. 10. 25. 15:40 Middleware, Cloud/WAS

JBoss 5.x에 대한 관리화면 폴더는 각 도메인안의 

  • deploy/jmx-console.war : JMX 콘솔
  • deploy/management : 웹 콘솔
두 디렉토리를 삭제하면 JMX 관리가 안됨. 보고 싶다면 보안을 설정한다

  • jmx-console.war/WEB-INF/web.xml에서 하기 security 테그의 주석을 제거한다 
<security-constraint>
     <web-resource-collection>
       <web-resource-name>HtmlAdaptor</web-resource-name>
       <description>An example security config that only allows users with the
         role JBossAdmin to access the HTML JMX console web application
       </description>
       <url-pattern>/*</url-pattern>
     </web-resource-collection>
     <auth-constraint>
       <role-name>JBossAdmin</role-name>
     </auth-constraint>
   </security-constraint>


  • JBossAdmin 권한을 가진 사용자만이 JMX 콘솔 사용이 가능하다 
  • 사전에 WEB-INF/jboss-web.xml 의 보안 도메인 링크가 하기와 같이 설정되어 있어야 한다
<jboss-web>
      <security-domain>java:/jaas/jmx-console</security-domain>
</jboss-web>

  • security domain에 대한 부분은 conf/login-config.xml에 하기와 같이 설정되어 있다
 <application-policy name="jmx-console">
    <authentication>
      <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
        flag="required">
        <module-option name="usersProperties">props/jmx-console-users.properties</module-option>
        <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
      </login-module>
    </authentication>
  </application-policy>

  • conf/props 디렉토리 밑에 jmx-console-users.properties에 key=value로 admin을 정의 한다
  • conf/props 디렉토리 밑에 jmx-console-roles.propertiess에 하기와 같이 역할을 정의 한다
admin=JBossAdmin,HttpInvoker

  • management/console-mgr.sar/web-console.war/WEB-INF 디렉토리에서 web.xml 의 security 태그 주석을 제거하고 jboss-web.xml에서 java:/jaas/web-console를 java:/jaas/jmx-console 로 변경하면 똑같은 보안설정을 따르게 된다. 



posted by 윤영식
2012. 9. 3. 18:06 Middleware, Cloud/WAS

JBoss의 사용하는 port를 변경하거나, 서비스 추가/삭제 및 환경설정에 대한 관리를 알아보자. 이런 관리를 위해서는 먼저 JBoss의 아키텍쳐를 아는 것이 중요하다. 

  • 4.0.3 이전 JMX를 이용하여 service 추가/삭제
  • 4.0.3 이후 microcontainer 상에서 service를 POJO(Plain Old Java Objects) 로 만들어 추가/삭제 가능
  • 5.x 버전부터 JBoss는 microcontainer-based 아키텍쳐를 사용하고 있다. 

▶ microcontainer란 무엇인가?
  • Spring framework와 유사하게 dependency injection framework 이다 
  • DI에는 다음과 같은 설정을 한다
    • instantiated할 오브젝트 설정
    • 인스턴스 오브젝트의 constructor 파라미터 제공
    • set 프로퍼티에 값 설정
    • 오브젝트끼리 의존관계 설정
  • microcontainer는 이전의 JMX kernel 아키텍쳐보다  훨씬 가볍다, 환경설정이 적다, 서비스들을 standalone올 디플로이 할 수 있다. 
  • microcontainer위에 모든 서비스가 올라간다 (단, v5.0에는 JMX kernel위에 JMX, JNDI등이 올라가지만 이후는 microcontainer위에 전분 올라가도록 변경됨)
  • 환경파일의 이해
    • server/xxx/conf/bootstrap.xml : primary beans configuration 파일이다 

▶ JMX  이해하기 
  • Client는 JMX Server를 통해서 xxxMBean 인터페이스를 상속받은 MBean 클래스의 내역을 서비스 받는다
  • JMX Server가 xxxMBean을 lookup해서 찾고 client는 바로 xxxMBean을 접근할 수 없다. 
  • jboss-service.xml 파일 설정을 기반으로 service deployer가 MBean을 인스턴스화 한다. 또한 *-service.xml 설정도 같이 엮어서 인스터스화 한다.
  • jboss-service.xml 파일이 MBean 설정을 위한 primary descriptor 파일이다. 주 설정내역은 다음과 같다.
    • logging service 
    • thread pool : 다양한 서비스의 thread pool을 제공한다
    • JNDI
    • MBean 관리를 위한 security 
    • MBean과 관련된 JMX 서비스들
    • MBean과 관련된 remoting 서비스

▶ MBean 명칭 이해하기
  • MBean 명칭안는 여러부분이 내포된다.
  • domain : 자바의 패키지 명칭
  • key-value : 콤마로 구분

예) jboss.jca:service=ManagedConnectionPool,name=DefaultDS

  • jboss.jca = domain 이고 콜론앞의 값
  • service=ManagedConnectionPool,name=DefaultDS = key properties들이고 콤마로 구분된다. (순서완 상관없음)

▶ Application Server 환경설정하기
server/xxx/conf/ 디렉토리 밑에 있는 config 파일들을 알아보자 
  • bootstrap.xml : POJO를 초기화 하기위하여 microcontainer가 사용함
  • jax-ws-catalog.xml : JAX-WS를 위한 맵핑에 사용함
  • jbossjta-properties.xml : Java Transaction API (JTA) 서비스에서 사용함
  • jboss-log4j.xml : 로깅 설정
  • jboss-service.xml : JMX kernel에서 사용
  • jndi.properties : JNDI 서비스에서 사용하는 디폴트 설정값
  • login-config.xml : security 서비스에서 사용
  • standardjboss.xml : EJB 서비스에서 사용
  • standardjbosscmp-jdbc.cmp : Container Managed Persistence(CMP) EJB를 위한 다양한 DB 설정에 사용 
  • 다른 환경 파일들 설명



posted by 윤영식
2012. 8. 16. 17:43 Middleware, Cloud/WAS

JBoss는 메모리의 효율적 사용을 위하여 몇가지 종류의 서버 타입을 나누어 놓았다. 한번 들여다 보자 


▶ microcontainer 

  • 메모리를 적게 사용한다
  • 시작이 빠르다
  • microcontainer 위에 필요한 서비스들이 plug-in 된다 
  • server configureation은 같이 올라간다. 3종류 환경 : default, minimal, all

마이크로 컨테이너에 Plug-in 되어 올라가는 서비스들 

    • default : clustering은 없고 대부분의 필요한 서비스가 함께 올라감
    • minimal : deploy, JNDI, microcontainer등 최소한의 요소만 올라감
    • all : clustergin 포함해서 모든 서비스가 다 올라감 (server/all/deploy/cluster/cluster-jboss-beans.xml 환경참조)

▶ server/default 폴더 
  • conf, deploy, deployers, lib 이 기본 디렉토리로 존재
  • 기동된 이후 여러개의 temp 디렉토리가 생성됨 : data, log, tmp, work 등 
    • conf : 서버 기동시에 최초에 한번만 스캔된다. 즉, 재시작해야만 다시 인식됨 (자동 reloading 있음 좋겠다)
      • bootstrap.xml : microcontainer 코어 서비스들 정의
      • jboss-services.xml : 시작시 기동할 코어 JMX 서비스들 정의 
      • standardjboss.xml : EJB container 정의
      • jboss-log4j.xml : 로깅 설정
      • login-config.xml : authentication(자격-권한) 과 authorization(권한 범위-인증) 설정 
    • deploy : JAR, WAR, EAR 파일이 놓이면 시작시 자동으로 인식하여 배포함 
    • deployers : JBoss AS 서비스들을 가진다
    • lib : 어플리케이션 공유 라이브러리 디렉토리 
    • 기동시 생성되는 디렉토리들
      • data : write to file temp data ex) HSQL 이용시
      • log : boot.log, server.log, audit.log 쌓임
      • tmp : stores temp data
      • work : compile jsp files

▶ 자신의 서버환경 만들기 
  • default, minimal, all중 자신이 원하는 것을 하나 선택한다 
  • Copy & Paste하고 디렉토리 명칭을 원하는 것으로 변경한다 


▶ Start / Stop 

다른곳에서 너무 잘 정리해서 그냥 참조 : http://www.allsoft.co.kr/bbs/board.php?bo_table=study97_1&wr_id=4

  • 8080 가 default port로 사용
  • 맨 끝에 Started in 시간 나오면 성공
  • run.bat -c default -b <ip-address>
▶ 애플리케이션 Deploy
server/XXX/deploy/ 폴더 안에 파일 copy하면 deploy되고 delete하면 undeploy 된다 
예로 web01.war 파일을 deploy 폴더에 copy하면 jboss 콘솔창에 하기와 같은 메세지가 출력된다. 
17:06:07,823 INFO  [TomcatDeployment] deploy, ctxPath=/web01
역으로 delete하면 하기와 같은 메세지가 출력된다.
17:07:11,849 INFO  [TomcatDeployment] undeploy, ctxPath=/web01




posted by 윤영식
2012. 8. 16. 16:51 Middleware, Cloud/WAS

Mining 출판사에서 나온 내용을 읽으며 중요한 사항 및 참고할 만한 글을 올려 본다

  • JBoss의 의미가 처음에는 Enterprise Java Beans Open Source Software 라는 뜻으로 EJBoss 였다가 E 자가 맘에 안들어서 JBoss가 되었단다
  • JBoss 5 버전을 다운로드 받는 곳 :  http://www.jboss.org/jbossas/downloads
    • 적당한 위치에 푼다 (5.1버전은 JDK6 사전설치)
    • top level 디렉토리는 : bin, client, docs, lib, server 
      • bin : run, shutdown, probe(discovering JBoss AS clusters)
      • client : 클라이언트 어플리케이션과 통신을 위한 라이브러리들 존재
      • docs : 메뉴얼, 샘플
      • lib : core AS 라이브러리들 
      • server : 특성에 맞는 운영을 위한 디렉토리로 구분  (conf / lib / deploy 는 공통으로 존재)


posted by 윤영식
prev 1 next