2010. 7. 15. 20:46 IT

 

웹페이지 속도 측정 등으로 검색해서는 잘 안나오더라..

 

마침내 찾은 툴들

httpwatch : 익스플로러와 firefox에 기생하여 돌릴수 있는 http monitoring 툴

http://www.httpwatch.com

베이직 버전을 무료로 쓸수 있는데 기능이 조금 부족하네요.

필터 기능을 이용하여 리소스 유형별 갯수를 얻을수도 있다.

 

피들러 : http://www.fiddler2.com/fiddler2/

비교적 알려진 공개툴

아이콘 설명은 http://www.fiddlertool.com/Fiddler/help/ui.asp 을 참조하자.

 timeline 기능이 재미있다. (autoscale chart 기능을 체크해두면 더 가독성이 높아진다. )

좀더 디테일한 기능이 많은데 생략~

 

IBM Page Detailer : http://alphaworks.ibm.com/tech/pagedetailer

약간 기능이 부족한듯 하다. 차트와 디테일 기능을 제공한다.

 

YSlow : 파이어폭스 플러그인 (firebugs 플러그인이 먼저 설치되어야 한다.)

 

 proxymotion : http://www.proxomitron.info/    http://en.wikipedia.org/wiki/Proxomitron
아직 안써봤다.

 

iewatch : http://www.iewatch.com/   상용으로 trial제공하는듯. 아직 안써봤다.

 

 

 

개선안

  •  캐시 만료기간 지정
  •  스크립트 파일 합치기
  •  gzip 적용 : html, js, css 등 텍스트 파일에만 대상으로 할것

 

 

 

참고글 : http://blog.pages.kr/254

 

 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 7. 14. 13:03 IT

 

턱시도의 dom 파일에 기술한 연동서버가 정상적으로 떠있는지 확인하는 방법은

 

  1. telnet IP port 로 상대 서버의 포트가 LISTEN 상태인지 확인이 가능한데,,,
    가끔 telnet 을 막아서 refused 되는 경우가 있다.
    이경우에는...
  2.  tmadmin 의 psc 명령으로 상대 서버의 지정된 서비스가 available 상태인지 체크하면 된다.
    대충 아래와 비슷하게 하면 되는데...
    % tmadmin
    >psc -s 해당서비스명
    Service Name Routine Name Prog Name Grp Name ID Machine # Done Status
    서비스명         ?                   ?                그룹명       ID ?                   -  AVAIL
    >quit
    이거 번거로우니 당연히 스크립트로 !!!
  3. 스크립트

    1. #!/bin/sh
    2. # 타 턱시도 서버의 AP가 살아있는지 확인하기 위한 script 
      # 활용성을 높이기 위해 인자를 받아 처리하도록 함.

      # 사용법
      # $0 {severname_text} {ap} 2>/dev/null
      if ! [ $# = 2 ]
      then
          echo usage : $0 {servername_text} {ap}
          echo example : $0 HelloServer ap_hello
          exit
      fi
      PGM=tmadmin
      server=$1
      text=live-$server.txt
      app=$2
      (
        echo "psc -s $app"
        echo "quit"
      ) | $PGM > $text
      cnt=`grep AVAIL $text | wc -l`
      if [ $cnt -gt 0 ]
      then
          echo "$server status OK"
      else
          echo "$server problem detected. see $text"
      fi

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 7. 7. 11:19 IT

 

eclipse 에서 weblogic을 deploy, undeploy, redeploy 할수 있도록 스크립트를 제공하고 있다.

오늘은 한 신입 개발자가  에러가 난다고 노트북을 들고 왔다.

 

어, 처음보는 에러다.

 

순서대로..

 

Caused by: javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException

Caused by: javax.naming.CommunicationException [ Root exception is weblogic.security.acl.internal.AuthenticatedUser; nested exception is:
  java.io.StreamCorruptedException: invalid type code : 31]

weblogic.deploy.api.tools.deployer.DeployerException: Unable to connect to 't3://localhost:8001': invalid type code: 31. Ensure the url represents a running admin server and that the credentials are correct. ...

 

이거 뭐야...

답은.. jdk 버전의 문제였다.
플젝은 1.5를 쓰는데 1.6을 가지고 돌린결과.
 참고글에 따르면 ClassLoarder.loadClass에서 byte array 처리방식이 변경되었다고 한다.

우선 가이드는 환경변수에서 jdk1.6 경로를 제거하고 1.5로 재지정 하도록 시켰고.

참고글에는 -Dsun.lang.ClassLoader.allowArraySyntax=true 를 VM 인자에 추가해도 된다고 한다.

뭐 이거 호환도 잘 안되고.. 궁시렁 궁시렁..

 

 참고 : http://forums.sun.com/thread.jspa?threadID=5195504

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 7. 2. 16:31 IT

 

한 조직이 하는 일을 혼자 맡아서 해야 하는 관계로 쉘스크립트 KID가 잠깐 되었다.

 

몇가지 실생활에 도움이 되고 있는 스크립트 트릭들을  기록한다.
다 알고 있는 수준의 정보지만... 이정도도 하지 않고 모든걸 수작업으로 해결하는 모습이 주위에 가끔씩 보인다.
알면, 좀 쓰자. 모르면 좀 물어보자. 일을 조금더 즐겁게, 아니면 좀더 깔끔하게 하려고 생각해보자.

 운영체제 : AIX 1.6

  1. script로 telnet 명령 실행하기 
    목적 : 총 66명의 유닉스 유저에 각각 접속하여 컴파일 메이크 작업을 수행해야 했다. 한줄씩만 해도 66회다. 
    제약조건 : 각 유저계정의 ID, password 정보를 미리 알수 있어야 한다. 컴파일 방법이 동일해야 한다.
    과정 : telnet script 를 웹서핑하여 발견...
    추가 : telnet script를 좀더 재사용 가능하게 재작성함.
    #!/usr/bin/ksh
    # name : common_telnet_cmd.sh
    # telnet 으로 접속하여 컴파일등 작업수행
    # 실행방법 : $0 user_id shellcommand
    # 멀티 실행방법 : cat user_list | xargs -i $0 {} shellcommand;
    hostt=localhost
    port=23
    user=$1
    cmd=$2
    ( echo open ${host} ${port}
    sleep 1
    echo ${user}
    sleep 1
    echo ${user}XXX # 암호가 다를 경우 변수로 빼서 처리하세요...
    sleep 1
    echo ${cmd}
    sleep 1
    echo 'exit' ) | telnet
  2. 일괄 replace
    목적 : 여러 파일을 대상으로 특정 문자열을 한꺼번에 바꾸기
    제약조건 : 글쎄.. 뭐 있나?
    과정 : 역시 웹서핑
    1단계 : 조건에 맞는 파일을 검색하여 sed 를 이용한 치환
    find . -type f -name '*.source" -print | while read i
    do
    sed -e 's|/SAMPLE|/REAL|g' $i > $i.tmp && mv $i.tmp $i
    done

    이렇게 하니 잘 되긴 하는데 간혹 마지막에 캐리지리턴이 없는 파일의 경우에는 마지막 라인이 날라가는 불상사가 발생했다.
    그래서 시행착오 끝에 만든 두번째 버전
    2단계 : 치환 전에 먼저 파일 끝에 빈줄을 추가한다.  
    find . -type f -name '*.source" -print | while read i
    do
    echo \\n>> $i
    sed -e 's|/SAMPLE|/REAL|g' $i > $i.tmp && mv $i.tmp $i
    done
  3. 실행중인 프로세스ID 가져오기, 혹은 죽이기
    목적 : 종료쉘을 제공하지 않는 프로그램을 종료시킬때 사용
    제약조건 : 프로그램 정보를 확실히 알고 있어야 잘못 죽이지 않는다. awk를 쓸수 있어야 한다.
    과정 : 생략
    조회 : ps -ef | grep 검색문자열 | grep -v grep | awk '{ print $2 }'
    죽이기 : kill `ps -ef | grep 검색문자열 | grep -v grep | awk '{ print $2 }'`

 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 6. 30. 17:16 IT

 

두 repository 동기화 하기

백업용으로 다른 서버에 하나를 더 만들었다.

 

절차

  1. svn bianry install
  2. make repostiroy directory
    mkdir /repository/svn
    cd /repository/svn
    svnadmin craete mysvn-sync
  3. edit  hooks/pre-revprop-change
    unix에서는 pre-revprop-change 파일을  다음과 갈이 작성한다.
    #!/bin/sh
    실행권한도 추가한다. chmod +x pre-revprop-change
  4. svnsync init
    svnsync init file://a/b/c/mysvn-sync svn://myhost/mysvn
  5. sync
    여러가지 방법이 있다는데 잘 안되서 스케줄링 하는 방법을 택했다.
    sync_repo_cron.sh
    #!/bin/sh
    export LANG=ko_KR
    export RUN=/opt/subversion/bin/svnsync
    $RUN --non-interactive sync file:///a/b/c/mysvn-sync --username myid --password mypass
  6. 스케줄 등록
    crontab -e
    * * * * * /shell/sync_repo_cron.sh &

    

보아하니 svn서버를 띄워 놓아야 하나보다...

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 6. 30. 16:40 IT

 

목적 : 유휴 장비를 추가로 빌드서버로 사용하고 master node에서 통합하여 관리

 

방법 : 유휴 장비를 선정하여 slave를 설치한다.

준비사항 : jdk 1.4 이상, ant 1.7 이상, 접속 가능한 hudson master node

절차

  1. slave 선정
    당연히 놀거나, 빌드서버의 노고를 덜어줄수 있는 장비면 된다. OS 무관.
    대신 jnlp agent 접근을 위해 ssl 이나 특정 tcp 포트에 접속이 가능해야 한다.
    (여기서는 jnlp slave agent 를 위한 tcp port 오픈으로 작업했다.)
  2. hudson server에서 slave.jar  카피
    참고자료에서는 가능한 버전을 동일하게 가기 위해서 wget 같은 방법을 사용하여 복제하는 것을 권고 하고 있다.
    현재 hudson의 slave.jar 를 내려받는 방법은
    $HUDSON_MASTER/jnlpJars/slave.jar
    ex) http://myhudsonserver:80/jnlpJars/slave.jar
  3. hudson master jnlp tcp port setting
    hudson master server의 hudson 관리 > Configure System > TCP port for JNLP slave agents 값을 Random 또는 Fixed 로. (특정 포트만 오픈하는 경우에는 Fixed)
  4. hudson master node에서  new node 추가
    hudson master server에서 hudson 관리 > Manage Nodes > New Node >
    Node Name : 원하는 노드명. 참고자료에서는 slave hostname을 추천. 해보니 괄호 같은건 인식안됨
    Remote FS root : slave의 작업 root 절대패스
    Labels : slave들을 논리적으로 grouping 짓기 위한 명칭
    나머지는 default 값.
  5. slave.jar 실행
    실행명령은 다음과 같다.
    java -jar slave.jar -jnlpUrl http://myhudsonserver:80/computer/허드슨슬레이브노드이름/slave-agent.jnlp
  6. 빌드JOB 설정을 slave node에서 실행되도록 변경
    JOB의 Configurer 화면으로 이동하여
    Tie this project to a node 를 체크하면 노드 또는 Label을 선택할수 있게 된다.
    이때 주의할 것은 서버에 종속되는 정보를 빌드스크립트에 전달할 목적으로
    Build > Invoke Ant 의 Targets 항목에 -propertyfile /a/b/c.properties 등을 추가해두었다면
    반드시 slave 서버의 로컬경로 내에 해당 파일이 존재해야 한다는 것.
    추가 : 특정 서버에 종속되야 할 경우 Tie를 반드시 시켜둘것 (아니면 hudson이 지맘대로 서버를 돌려버린다.  장점이자 주의사항이다. )
  7. 기타...
    ant 확장 library (ftp, svn 등)가 slave에도 배포되었는지 확인할 것
  8. 회고
    좋은점 :
    웹배포 job들을 분리하여 좀더 깔끔해졌고, 배포형상이 틀어지는 것을 피할 수 있었다. (기존엔 웹리소스만 업데이트 하고 싶은데, 소스나 서버 프로그램들이 업데이트 되는 문제가 있었다.)
    기존 빌드시간을 단축할 수 있게 되었다 (웹 배포만 1분넘게 걸린다.)
    제한된 자원을 보다 효율적으로 사용할 수 있게 되었다.
    아쉬운점 :
    처음에 분산빌드를 준비하기 위한 좋은 가이드를 찾지 못해 작업중간에 시간을 낭비했다. (slave.jar 는 실행했는데,, 그담에 뭘해야 하지?? ) 다음엔 좋은 가이드를 먼저 찾는데 좀더 시간을 투자하자.
    점점 빌드서버 구조가 복잡해지고 있는데, 정리를 못하고 있다.
    계속할것 :
    통상 PJT가 파일서버, 형상서버 두대 정도는 가지고 있으니, 가용장비를 적절하게 활용할 수 있도록 구성을 해주는 것도 좋을듯 싶음.

 

 

 

참고자료 : http://www2.java.net/blog/johnsmart/archive/2010/06/02/starting-hudson-slave-unix-machine-without-ssh

 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 6. 29. 12:19 IT

 

rcp 사용하기
1. rcp란 : transfer files between a local and a remote host or between two remote hosts.


2. setting

[src host]
/etc/hosts file
targetip target-hostname
~/.rhost file
target-hostname target-user

[target host]
/etc/hosts file
src-ip src-hostname
~target-user/.rhost file
src-hostname src-user

3. usage
put : rcp myfile target-hostname:/a/b/myfile
get : rcp target-hostname:/a/b/myfile myfile 

4. sample
DEPLOY_HOST=xxxxxx
rcp $LIB_PATH/$LIB_PREFIX$FILENAME.so $DEPLOY_HOST:$LIB_PATH/$LIB_PREFIX$FILENAME.so

 

cf) rsh
rsh $DEPLOY_HOST mv /afile /bfile

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 6. 24. 08:40 IT

 

  •  오라클 접속이 안되는 경우


    관련로그

    ORA-01034: ORACLE not available 
    ORA-27121: unable to determine size of shared memory segment
    IBM AIX RISC System/6000 Error: 13: Permission denied

    원인
    oracle 계정이 아닌 타 계정으로 oracle을 실행시킬때 oracle 실행파일의 permission 과 관련되어 발생하는 문제임.

    조치방법
    1. oracle이 기동되어 있는지 확인
    ps -ef | grep ora | grep -v grep
    # 특정경우 oracle 이 아닌 ora_xxx_xxxx 형태로 기동되는 경우가 있으므로 가장 확실한 방법은 oracle user가 소유한 프로세스를 확인하는 것이다.

    2. tuxedo 실행계정에서 설정한 ORACLE_SID 와 tnsnames.ora 파일내 설정한 SID 값이 동일한지 확인 (오타등)
    echo $ORACLE_SID # 통상 실행계정의 .profile 내에 설정한다.
    grep $ORACLE_SID $ORACLE_HOME/network/admin/tnsnames.ora # 같은 이름의 설정이 존재하면 OK

    3. $ORACLE_HOME/bin/oracle 실행파일의 권한을 확인하여 변경한다.
    정상적으로 실행되기 위해서는 oracle 실행파일의 권한은 아래와 같아야 한다.
    -rwsr-s--x
    통상 s 값이 설정되지 않은 경우가 있어 변경을 해주어야 한다.
    oracle 설치계정 또는 root 권한으로 아래와 같이 변경한다.
    chmod +s $ORACLE_HOME/bin/oracle
    변경이 정상적으로 되었는지 확인한다.
    ls -al $ORACLE_HOME/bin/oracle

    다시 턱시도를 기동하여 정상적으로 연결되면 OK

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 6. 21. 11:36 IT

 

ascii type 파일들이 유닉스에서 ^M 표시가 나는 것을 막기 위해 eol-type 설정하는 방법을 확인해보았다.

 

 설치한 계정에 .subversion 디렉토리가 생성되어 있고 그 아래 config 파일을 수정하면 된다.

 

vi ~/.sunversion/config

 

[miscellany]

enable-auto-props = yes

 

[auto-props]

#source file

*.c = svn:eol-style=native; svn:mime-type=text/plain

*.cpp = svn:eol-style=native; svn:mime-type=text/plain

*.pc = svn:eol-style=native; svn:mime-type=text/plain

*.h = svn:eol-style=native; svn:mime-type=text/plain

*.ph = svn:eol-style=native; svn:mime-type=text/plain

*.java = svn:eol-style=native; svn:mime-type=text/plain

*.jsp = svn:eol-style=native; svn:mime-type=text/plain
Makefile = svn:eol-style=native

 

#executable shell

*.sh = svn:eol-style=native; svn:executable

*.txt = svn:eol-style=native; svn:mime-type=text/plain

 

#image

*.png = svn:mime-type=image/png

*.jpg = svn:mime-type=image/jpeg

*.gif = svn:mime-type=image/gif

*.bmp = svn:mime-type=image/bmp

 

#application

*.pdf = svn:mime-type=application/pdf

 *.doc = svn:mime-type=application/msword

*.ppt = svn:mime-type=application/vnd.ms-powerpoint

*.xls = svn:mime-type=application/vnd.ms-excel

*.gz = svn:mime-type=application/gzip

*.tgz = svn:mime-type=application/gzip

*.zip = svn:mime-type=application/zip
*.swf = svn:mime-type=application/x-shockwave-flash
*.rtf = svn:mime-type=text/rtf

# video / audio
*.avi = svn:mime-type=video/avi
*.mov = svn:mime-type=video/quicktime
*.mp3 = svn:mime-type=audio/mpeg
*.wav = svn:mime-type=audio/wav

# web resource
*.js = svn:eol-style=native; svn:mime-type=text/javascript
*.css = svn:eol-style=native; svn:mime-type=text/css
*.dtd = svn:eol-style=native; svn:mime-type=text/xml

*.html = svn:eol-style=native; svn:mime-type=text/html
*.xml = svn:eol-style=native; svn:mime-type=text/xml
*.xsd = svn:eol-style=native; svn:mime-type=text/xml



추가이슈로.. 이미 설정하기 전의 파일들은 일일이 지정해주지 않으면 반영이 안되는것 같다.
그래서 쉘로 돌려보았는데...

set_eol_native.sh
svn update

find . \( -name *.c -o -name *.pc -o -name *.h -o -name *.ph -o -name *.ldt -o -name makefile \) -type f -exec svn propset svn:eol-style native {} \;

find . \( -name *.java -o -name *.jsp -o -name *.properties -o -name *.xml -o -name *.sql -o -name *.dtd -o -name *.tld -o -name *.xsd \) -type f -exec svn propset svn:eol-style native {} \;

find . \( -name *.js -o -name *.css -o -name *.html -o -name *.txt \) -type f -exec svn propset svn:eol-style native {} \;

svn commit -m "prop setting eol-type to native"

 

약간 곤란한 경우는 저 작업 중간에 conflict 가 나는 경우 -> revert 해서 현행화 하고 다시 돌리기..

또 약간 곤란한 경우는 
svn : XXX has inconsistent newlines  
svn : Inconsistent line ending style
이라고 나오면서 skip 하는 경우...  뭐 스킵해야 할듯...

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote
2010. 6. 21. 09:03 IT

 

환경 : weblogic 10.0 MP1 , SunOne web 서버

 

증상 : java 프로그램에서 request.gerRemoteAddr() 호출시 client IP 대신 web server ip 를 가져옴

 

원인 : web server와 plugin 형태로 구성할 경우 plugin 관련 셋팅이 안된 경우 client ip 값을 정상적으로 가져오지 못함  (web server가 client가 됨)

 

조치 : client ip를 인식할수 있도록 Weblogic Plugin Enabled 값을 true 로 설정

 

조치방법 :

  1. admin console 접속
  2. enviroment > severs > 대상서버 > Advanced > "WebLogic Plug-in Enabled" 체크
  3. 반영후 was restart ( restart 해야 제대로 먹음)

 

참고 : http://whitebear.tistory.com/80

 

이 글은 스프링노트에서 작성되었습니다.

posted by smplnote