웹기반시스템하에서의 성능에 관한 이론적 고찰 
http://www.javaservice.net/~java/bbs/read.cgi?m=qna&b=consult&c=r_p&n=1008701211

먼저, 아파치 access_log 분석을 통해, 사용자에 의한 부하량을 조사하는 것이
우선입니다. access_log 를 이용하시면 다음과 같은 정보를 얻을 수 있습니다.

1) 일중 서로 다른 IP어드레스의 누적치 그래프
   시간당/분당 다녀간 서로 다른 IP어드레스 그래프
   (필요시, Proxy Server 보정치 조정)
2) 일일 동시단말사용자 그래프
3) 동적컨텐츠(Servlet/JSP)에 대한 분당 HIT건수의 일중 그래프

위의 것을 통해, 동시단말사용자에 의한 분당 혹은 초당 요청건수와 그에 따른
한 사용자당 평균 몇 초 간격으로 호출을 하는지를 확인할 수 있습니다.

또한, 과거의 몇 달 동안의 로그가 있다면, 간단히, access_log 의 사이즈
비교만으로도, 사이트의 증가량 및 증가패턴을 이해할 수 있을 것입니다.

4) httpd.conf 파일의 common 로그패턴에 "%T"옵션을 추가하여 해당 요청의
응답시간도 access_log 에 기록토록 하시고 최소한 하루치의 로그를 받으세요.

5) HIT량을 기준으로 한 각 어플리케이션(Servlet/JSP) HIT량 점유 파이 그래프

6) 개별 어플리케이션의 응답시간의 합을 기준으로한 파이그래프

그리고, 이를 통해 가장 응답이 느린 Servlet/JSP와, 또 각 Servlet/JSP별로
그 응답시간의 합을 계산하고 그 비율을 보면, 서버측에서 가장 오랫동안
점유한 서비스의 우선순위를 매길 수 있을 것입니다.

위의 과정을 통해, 어떤 응용어플리케이션이 가장 이 시스템에 어플리케이션적인
부하를 주고 있는지를 리스팅 할 수 있습니다.
경험적으로 볼때, 수백/수천개의 어플리케이션이 있다면 이 중 30-40%만이 사용되며
그 30-40%  중에서도 상위 20%의 어플리케이션이 전체 부하의 80%를 점유하고 있을
것입니다.

7) requestmon 이라는 모듈을 통해, 현재 수행되고 있는 Servlet/JSP 리스트 확인 및
응답이 느린 서비스 추적
관련모듈: 
현재실행중인 서비스 모니터링 - requestmon - 
http://www.javaservice.net/~java/bbs/read.cgi?m=appserver&b=was&c=r_p&n=982131370
Orion 서버에 requestmon 적용하기
http://www.javaservice.net/~java/bbs/read.cgi?m=appserver&b=orion&c=r_p&n=1009556331
Resin2.0.4 서버에 requestmon 적용하기
http://www.javaservice.net/~java/bbs/read.cgi?m=appserver&b=engine&c=r_p&n=1009768606



8) 위의 과정을 통해 상위 몇몇 개의 서비스를 선택하여 웹스트레스 테스트 툴을 이용,
강의시간에도 말씀드렸듯, 단위시간당 최대 처리건수인 TPS를 구하세요. 그리고, 각종
Tuning작업(DB튜닝, SQL튜닝, 파라메터튜닝, OS 튜닝, N/W 용량확인)을 통해
최대TPS를 끌어올리는 작업을 하세요.

9) 그러나, Tuning을 아무리 하여도 한계는 있겠지요... 그 최대 TPS에 따른 실제
발생한 hit량(access_log)을 비교하고, 동시단말사용자 증가에 따른 필요 전체 TPS를
가늠 해 보세요...


10) 특히 일중 동시단말사용자수 변화에 따른 해당 시점의 서비스 상태를 같이
비교하시면,한 머신에서 최대로 처리할 수 있는 동시단말사용자가 몇명 쯤이겠거니를
판단할 수 있을 것입니다. 
이젠 L4/L7나 IBM eND를 통해 여러대의 머신을 클러스트링하여 로드발란싱을 시켜야
할 시점이 되는 것입니다. DB서버의 증설은 당연히 필요할 것으로 보이며,
웹어플리케이션서버(현재는 tomcat으로 운영되고 있군요)의 개수 및 서버용량을
산정해 보세요...

웹기반 시스템하에서의 용량산정은 아직 경험이 없다보니 경험치가 많지 않습니다.
저의 경험치는 다음과 같습니다. 웹어플리케이션서버를 위한 머신의 tpmC 요구량은,

필요서버용량(tpmC) = (동적컨텐츠에의한 분당최대처리건수) x 10tpmC + 여유분50%

입니다. 예를 들어, 초당 100건(100TPS)라면 분당 6,000 TPM 이고, 이는
6,000TPM x 10 tpmC = 60,000 tpmC 이며, 여기에 50%의 Buffer를 첨가하면
90,000 tpmC 가 필요하게 됩니다.

NOTE: 결코 절대적이지 않습니다. 어플리케이션의 특성에 따라 달라지는 것은 당연
하잖습니까. 제가 알기로는, 국내 굴지의 프로젝트에서도 웹서버에 대한 용량산정에
있어서, 만약, 특정한 공식이 있다면, 그 공식은 과거 경험치를 토대로 역산하거나
비즈니스적인 요건에 맞게 미리 서버를 대충 선정하고, 그것에 맞게 그럴싸하게 만든
가라데이타(?, 거짓부렁)입니다. 신뢰하지 마세요 ;-)

작성하신 문구의 어투와, 웹사이트의 구성으로 보건데, 1초당 10건도 처리하지
못하고 있을 듯 합니다. 1초당 10건이라함은(10 TPS), 평균적으로 사용자의
호출패턴이 20초간격으로 한번씩의 호출을 발생시킨다고 가정했을 때,

최대동시단말사용자(x명)/20초 = 10 TPS, 

즉, 최대 동시단말사용자는 200 명이 max가 된다는 얘깁니다.

과거 및 현재 부하량을 분석하고, 어플리케이션의 중요도가 높은 것을 선택하여 
웹스트레스테스트 시행을 통한 개별 최대TPS를 구하고, 향후 증가 예상을 통해
필요한 용량산정을 수치로 제시하여 고객과 협의하세요.

이러한 패턴으로 작업한 각종 문서들이 본 게시판을 찾아 보시면 다수 있습니다.
참고가 될 겁니다.

PS:  첫화면의 모든 데이타 사이즈가 303KB이네요. 임대받은 IDC센타의 N/W 용량은
어떻게 되는지요? 만약 10 Mbps dedicated 라면, 실전송 속도는 대략 이것은 60%로
가정하고, 10 Mbps x 60% x 1024 / 8 = 768 (KB/sec)가 되네요. 만약, 전송해야할
데이타의 평균량이 300KB라고 가정하면,768(kb/sec) / 300(kb) = 2.56 (건/sec)이
됩니다. 즉, 1초당 2.56 개만 서비스할 수 있다는 얘기가 됩니다. 2.56 TPS라는
얘기는 20초마다 한번씩 클릭하는 사용자 51명(2.56 x 20 = 51.2)이 최대 동시단말
사용자수가 될 것입니다.(예를 든 것 뿐입니다. 이미지는 "return code 304" cache가
되니, 얘기가 다르겠지요)

PS: DB Connection Pool을 사용하고 하지 않고는 해당 어플리케이션의 환경과
부하량 규모에 따라 다릅니다. 얼마나 차이나 나느냐 라는 질문은 우문입니다.
경우에 따라 다른 것이지요. 분명한 것은 성능 차이가 있다는 것입니다.

PS: access_log를 DB에 넣고, 이를 분석하는 아기자기한 저만의 프로그램들을
이 곳에 공개합니다. 시간상, 사용법은 향후 다시 문서화 하겠습니다. 엔지니어라면
소스를 보면 뭘 하자는 것인지 이해 하겠지요...

자바서비스넷(http://www.javaservice.net) --> Etc --> 기타자료실

웹로그 분석 프로그램 version 1.0
http://www.javaservice.net/~java/bbs/read.cgi?m=etc&b=etc&c=r_p&n=1015965476


----------------------------------------------------
웹기반 시스템하에서의 용량산정은 아직 경험이 없다보니 경험치가 많지 않습니다.
저의 경험치는 다음과 같습니다. 웹어플리케이션서버를 위한 머신의 tpmC 요구량은,
필요서버용량(tpmC) = (동적컨텐츠에의한 분당최대처리건수) x 10tpmC + 여유분50%
입니다. 예를 들어, 초당 100건(100TPS)라면 분당 6,000 TPM 이고, 이는
6,000TPM x 10 tpmC = 60,000 tpmC 이며, 여기에 50%의 Buffer를 첨가하면
90,000 tpmC 가 필요하게 됩니다.
 

신고
by Hazard 2010.01.14 16:52
    DailyRollingAppender
    매일매일 Log file 을 날짜를 붙여서 백업하는 방식이다.
    나름 쓸만하지만 2003 에서 권한문제로 Rolling 이 잘 되지 않는 경우가 있다.

    또, DailyRollingAppender 를 사용할 경우
    MaxFileSize
    MaxBackupIndex
    위 두개의 설정을 사용할 수 없다. 사용한다면 (No such property [maxFileSize]) 와 같은 에러를 만나게 될것이다.
    위 두설정을 못쓴다면 대용량 서버에서 로그파일이 너무 커지거나 로그파일 개수가 너무 많아지는
    결과를 초래 할수 있다.

    그래서 꼭 Daily Rolling 이 필요하지 않다면
    RollingFileAppender 를 사용하는것도 괜찮을듯 하다.

    아래는 예제 이다.

    # file Appender
log4j.appender.file.Threshold=DEBUG
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:/myLog.log
log4j.appender.file.MaxFileSize=100MB
log4j.appender.file.MaxBackupIndex=100
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%n[%d{dd-HHmmss}][%-2p][%l]- %m

    
     이렇게 설정한다면 100MB 짜리 파일이 꼭 100 개까지만 생성되고 그이상은 가장 오래된 파일을 지우면서 동작한다.



-hazard-

신고
by Hazard 2009.01.09 10:57


SSL Certificate Installation :: Tomcat Web Server

SSL Certificate Installation in Tomcat

Installing The Certificates to the Keystore

  1. Download your Certificate files from your DigiCert Web-PKI Customer Account to the directory where your keystore (keystore.key) was saved during the CSR creation process. The certificate must be installed to this exact keystore. If you try to install it to a different keystore it will not work.

    The three certificates you downloaded must be installed to your keystore in the correct order for your DigiCert certificate to be trusted. If the certificates are not installed in the correct order, then the certificate will not authenticate properly. Use keytool to install all three, as follows:

  2. Install the Root Certificate file:

    Each time you install a certificate to your keystore you will be prompted for the keystore password, which you chose when generating your CSR.

    Type the following command to install the Root certificate file:

    keytool -import -trustcacerts -alias root -file TrustedRoot.crt -keystore keystore.key

    ** Note: Choose 'Yes' if you get prompted with a message that says "Certificate already exists in system-wide CA keystore under alias <entrustsslca> Do you still want to add it to your own keystore? [no]:"

    You will get a confirmation stating that the "Certificate was added to keystore"

  3. Install the Intermediate Certificate file:

    Type the following command to install the Intermediate certificate file:

    keytool -import -trustcacerts -alias digicert -file DigiCertCA.crt -keystore keystore.key

    You will get a confirmation stating that the "Certificate was added to keystore".

  4. Install the Primary Certificate file:

    Type the following command to install the Primary certificate file:

    keytool -import -trustcacerts -alias tomcat -file your_domain_name.crt -keystore keystore.key

    This time you should get a slightly different confirmation stating that the "Certificate reply was installed in keystore"

    If it asks if you want to trust the certificate. Choose y or yes.

    Your Certificates are now installed to your keystore file (keystore.key) and you just need to configure your server to use the keystore file.

Configuring your SSL Connector

Tomcat will first need an SSL Connector configured before it can accept secure connections.

**Note: By default Tomcat will look for your Keystore with the file name .keystore in the home directory with the default password changeit. The home directory is generally /home/user_name/ on Unix and Linux systems, and C:\Documents and Settings\user_name\ on Microsoft Windows systems. -- It is possible to change the filename, password, and even location that Tomcat looks for the keystore. If you need to do this, pay special attention to #8 of Option 1 or #5 of Option 2 below.

Option 1 -- Add an SSL Connector using admintool:

  1. Start Tomcat.
  2. Enter 'http://localhost:8080/admin' in a local browser to start admintool.
  3. Type a username and password with administrator rights.
  4. On the left select service (Java Web Services Developer Pack).
  5. Select Create New Connector from the drop-down list on the right.
  6. Choose HTTPS in the Type field.
  7. In the Port field, enter 443. This defines the TCP/IP port number on which Tomcat will listen for secure connections.
  8. Enter the Keystore Name and Keystore Password if your keystore is named something other than .keystore, if .keystore is located in a directory other than the home directory of the machine on which Tomcat is running, or if the password is something other than the default value of changeit. If you have used the default values, you can leave these fields blank.
  9. Select Save to save the new Connector.
  10. Select Commit Changes to save the new Connector information to the server.xml file so that it is available the next time Tomcat is started.

Option 2 -- Configure the SSL Connector in server.xml:

  1. Copy your keystore file (your_domain.key) to the home directory (see the **Note above).
  2. Open the file Home_Directory/conf/server.xml in a text editor.
  3. Uncomment the SSL Connector Configuration.
  4. Make sure that the Connector Port is 443.
  5. If your keystore filename is something other than the default file name (.keystore) and/or your keystore password is something other than default (changeit) then you will need to specify the correct keystore filename and/or password in your connector configuration -- ex. keypass="newpassword"

    When you are done your connector should look something like this:

    <Connector port="443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/home/user_name/keystore.key" keypass="your_keystore_password" />

  6. Save the changes to server.xml.
  7. Restart Tomcat.

Installing your SSL Certificates in Tomcat Web Server


신고
by Hazard 2009.01.08 08:52
| 1 |