문자열 길이
string=abcd
echo ${#string} #4
echo `expr length $string` #4
echo `expr "$string" : '.*'` #4
RedirectMatch ^/([^./]+)$ /check.php?id=$1
이 설정의도는
/abc ---> /check.php?id=abc (redirect 의도)
/ccc ---> /check.php?id=ccc (redirect 의도)
/abc/ ---> /abc/
/abc.php ---> /abc.php
이와 같은 결과가 되도록 설정했지만 애석하게도 제대로 Redirect
되지 않습니다.
이유는 아파치의 Redirect 는 ? 문자가 인코딩(%3f)되어 넘어가기
때문에 PHP 파일에서는 요청쿼리로 해석하지 않고 완전한 하나의
파일로 인식하기 때문입니다.
실제로 첫번째 redirect 결과는
/abc ---> /check.php%3fid=abc (redirect 의도 실패)
이렇게 넘어가서 404 에러를 내게 됩니다.
해결방법은 ?(쿼리)를 사용하지 않고 PATH_INFO 환경변수가 생기도록
다음과 같은 방법을 사용하는것이 좋습니다.
권장설정)
RedirectMatch ^/([^./]+)$ /check.php/id=$1
or
RedirectMatch ^/([^./]+)$ /check.php/$1
or
RedirectMatch ^/([^./]+)$ /check/id=$1
or
RedirectMatch ^/([^./]+)$ /check/$1
sample>
RedirectMatch /v/(.*)\.swf$ http://www.maxpd.com/player/player.swf?videoId=$1
* Sun Microsystyems의 자바 HotSpot VM은 힙을 세 개의 영역으로 나누고 있다.
힙의 세 영역은 다음과 같다:
1) Permanent space: JVM 클래스와 메소드 개체를 위해 쓰인다.
2) Old object space: 만들어진지 좀 된 개체들을 위해 쓰인다.
3) New(young) object space: 새로 생성된 개체들을 위해 쓰인다.
* Heap layout 할당에 영향을 주는 스위치들
명령행 스위치 설명
-------------|-------
-Xms=[n] 최소 heap size
-Xmx=[n] 최대 heap size
-XX:PermSize=[n] 최소 perm size
-XX:MaxPermSize=[n] 최대 perm size
-XX:NewSize=[n] 최소 new size
-XX:MaxNewSize=[n] 최대 new size
-XX:SurvivorRatio=[n] New/survivor 영역 비율
-XX:newratio=[n] Old/new 영역 비율. HotSpot 클라이언트 VM은 8, HotSpot 서버 VM은 2.
-XX:TargetSurvivorRatio=[n] GC동안 비울 생존자 수용 가능량 퍼센티지 (capacity percentage.) 초기값은 50%
* New Generation 메모리 할당 공식
Eden = NewSize - ((NewSize/(SurvivorRatio + 2)) * 2)
From space = (NewSize - Eden)/2
To space = (NewSize - Eden)/2
* Old Generation 메모리 할당 공식
Old = Xmx - MaxNewSize
* GC한 상태의 Heap메모리 정보출력
jdk1.4에서 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC
* 정적페이지가 많을 때
-Xms418m -Xmx418m
-XX:PermSize=1024m
-XX:MaxPermSize=1024m
-XX:NewSize=290m
-XX:MaxNewSize=290m
-XX:SurvivorRatio=3
* 동적인 페이지가 많을 때
-Xms1024m -Xmx1024m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:NewSize=800m
-XX:MaxNewSize=800m
-XX:SurvivorRatio=4
-Xms384m -Xmx384m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=3
set CATALINA_OPTS=-Xms384m -Xmx384m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m -XX:MaxNewSize=128m -XX:SurvivorRatio=3
---------------------------------------------------------------------------
kol:/ero/bin>cat tomcat_startup.sh
#!/usr/bin/ksh
. /ero/bin/ero.env
export CATALINA_OPTS="-server -Xms4096M -Xmx4096M -XX:PermSize=64M -XX:MaxPermSize=64M -Xnoclassgc -XX:NewSize=1024M -XX:MaxNewSize=1024M -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=50 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC"
# -Xms4096M : 최소 heap 크기
# -Xmx4096M : 최대 heap 크기
#
# -XX:PermSize=64M : 코드영역(class로딩장소) 최소값
# -XX:MaxPermSize=64M : .. 최대값
# -Xnoclassgc : .. 에 대해 GC를 수행하지 않음
#
# -XX:NewSize=1024M : new 영역 최소 1G 확보
# -XX:MaxNewSize=1024M : .. 최대 ..
#
# -XX:+UseParNewGC : 멈춤을 최소로하는 new영역 GC 방법사용
# -XX:ParallelGCThreads=4 : GC를 동시 수행하는 thread갯수
#
# -XX:+UseConcMarkSweepGC : 멈춤을 최소로하는 old 영역 GC 방법사용
# -XX:CMSInitiatingOccupancyFraction=50 : old영역이 50% 이상 사용되면 GC 수행