<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Mimul&#039;s Developer World - Open Framework category</title>
  <link>http://www.mimul.com:80/pebble/default/categories/OpenFramework/</link>
  <description>미물의 개발 세상</description>
  <language>ko</language>
  <copyright>미물</copyright>
  <lastBuildDate>Thu, 18 Mar 2010 00:57:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  <image>
    <url>http://www.mimul.com/pebble/default/images/hhj.jpg</url>
    <title>Mimul&#039;s Developer World (Open Framework category)</title>
    <link>http://www.mimul.com:80/pebble/default/</link>
  </image>
  
  
  <item>
    <title>Tomcat 성능 향상 방법들</title>
    <link>http://www.mimul.com:80/pebble/default/2010/01/17/1263724020000.html</link>
    
      
        <description>
          &lt;p&gt;&lt;strong&gt;&lt;u&gt;*. JVM Tuning 튜닝&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;1. 메모리 가용성을 확보한 다음 힙 사이즈를 늘려라&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - -server -Xms768M -Xmx768M&lt;br /&gt;
&amp;nbsp;2. garbage collector를 튜닝하라(GC 로깅 분석 후)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - -XX: +UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-TraceClassUnloading&lt;br /&gt;
&amp;nbsp;3. 원격지에서 모니터링을 주기적으로 하라(물론 상용에선 빼라)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;*. Tomcat 튜닝&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;1.&amp;nbsp; 중복 로그 접점을 제거하고 하나로 통일하라(logging.properties)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - .handlers = 1catalina.org.apache.juli.FileHandler,java.util.logging.ConsoleHandler 부분을 .handler = 1catalina.org.apache.juli.FileHandler로 변경&lt;br /&gt;
&amp;nbsp;2. 로그 Overflow 예방하기 위해 아래 설정을 logging.properties에 추가하라&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - 1catalina.java.util.logging.FileHandler.pattern =${catalina.base}/logs/catalina.%g.log&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - 1catalina.java.util.logging.FileHandler.limit = 20000000&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - 1catalina.java.util.logging.FileHandler.count = 5&lt;br /&gt;
&amp;nbsp;3.&amp;nbsp; Synchronized Logging은 Disk I/O, 어플의 bottleneck의 한 요소이니 Asynchronous Logging으로해도 무방하다.&lt;br /&gt;
&amp;nbsp;4. maxKeepAliveRequest수가 클 경우 1000이 넘을 경우(TCP커넥션당 HTTP request가 많을 경우에 해당함)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - keep alive를 disable한다.&lt;br /&gt;
&amp;nbsp;5. DNS lookups을 줄여라(server.xml)&lt;br /&gt;
&amp;nbsp; - enableLookups=false&lt;br /&gt;
&amp;nbsp;6. maxThreads 늘리고, connectionTimeout을 줄여라&lt;br /&gt;
&amp;nbsp; - maxThreads=512, connectionTimeout=5000&lt;br /&gt;
&amp;nbsp;7. 불필요한 부하 발생을 제거하라&lt;br /&gt;
&amp;nbsp; - reloadable을 false, debug는 0, acceptCount를 무리하게 크게 하지 않음&lt;br /&gt;
&amp;nbsp;8. 네트워크 트래픽을 줄여라&lt;br /&gt;
&amp;nbsp; - compression를&amp;nbsp;on하고 compressableMimeTypes를 지정(text/html,text/xml,text/javascript,text/css,text/plain)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;*. AJP Tuning&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;1. 톰켓 서버를 두대이상 운영할 경우 Load Balance를 하라&lt;br /&gt;
&amp;nbsp;2. 커넥션 설정(Socket Timeout, Connection Pool Size, Connection Pool Timeout)을 지정하라&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[관련 포스트]&lt;/strong&gt;&lt;br /&gt;
&lt;a href=&#034;http://mimul.com/pebble/default/2007/08/24/1187964360000.html&#034;&gt;톰켓을 사용하는데 필요한 20가지 Tips&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>Open Framework</category>
    
    <comments>http://www.mimul.com:80/pebble/default/2010/01/17/1263724020000.html#comments</comments>
    <guid isPermaLink="true">http://www.mimul.com:80/pebble/default/2010/01/17/1263724020000.html</guid>
    <pubDate>Sun, 17 Jan 2010 10:27:00 GMT</pubDate>
  </item>
  
  <item>
    <title>logrotate를 활용하여 TOMCAT 로그파일(catalina.out) 일자별로 관리하기</title>
    <link>http://www.mimul.com:80/pebble/default/2009/12/27/1261911840000.html</link>
    
      
        <description>
          &lt;div style=&#034;float: left; padding-right: 5px;&#034;&gt; &lt;script type=&#034;text/javascript&#034;&gt;
tweetmeme_url = &#039;http://www.mimul.com/pebble/default/2009/12/27/1261911840000.html&#039;;
tweetmeme_source = &#039;mimul&#039;;
&lt;/script&gt; &lt;script type=&#034;text/javascript&#034; src=&#034;http://tweetmeme.com/i/scripts/button.js&#034;&gt;&lt;/script&gt; &lt;/div&gt;
Catalina로그를 한 파일에 누적되는 것을 피하기 위해서 보통은 cronolog,&amp;nbsp; log4j를 활용을 많이 하는데 기존 리눅스 시스템의 소프트웨어를 활용하는 방안을 하나 소개해 드립니다.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;1. /etc/logrotate.d 디렉토리 안에 아래의 파일을 생성&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ cd /etc/logrotate.d&lt;br /&gt;$ cat  tomcat&lt;br /&gt;&lt;br /&gt;${CATALINA_HOME}/logs/catalina.out {&lt;br /&gt;&amp;nbsp;copytruncate&lt;br /&gt;&amp;nbsp;daily&lt;br /&gt;&amp;nbsp;rotate 30&lt;br /&gt;&amp;nbsp;compress&lt;br /&gt;&amp;nbsp;missingok&lt;br /&gt;&amp;nbsp;notifempty&lt;br /&gt; dateext&lt;br /&gt;}&lt;br /&gt;$logrotate -f /etc/logrotate.d/tomcat # 로그파일 순환 테스트&lt;br /&gt;&lt;/pre&gt;
&lt;ul&gt;
    &lt;li&gt; copytruncate : 기존 파일을 백업해서 다른 파일로 이동하고 기존 파일은 지워버리는 옵션&lt;/li&gt;
    &lt;li&gt; daily : 로그파일을 날짜별로 변환&lt;/li&gt;
    &lt;li&gt; compress : 지나간 로그파일들을 gzip으로 압축&lt;/li&gt;
    &lt;li&gt; dateext : 순환된 로그파일의 날짜확장자&lt;/li&gt;
    &lt;li&gt; missingok : 로그파일이 없더라도 오류를 발생시키지 않음&lt;/li&gt;
    &lt;li&gt; rotate 30 : 로그 파일은 30개만큼 저장된 다음 제거되거나 메일로 보내짐&lt;/li&gt;
    &lt;li&gt; notifempty : 파일의 내용이 없으면 새로운 로그 파일을 생성 안함&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;strong&gt;2. 그외 일자별로 저장 방법&lt;/strong&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&#034;http://www.x4juli.org/&#034;&gt;java.util.logging과 RollingFileHandler를 활용&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#034;http://logging.apache.org/log4j/1.2/index.html&#034;&gt;Log4j의 DailyRollingFileAppender 활용&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&#034;http://logback.qos.ch/&#034;&gt;Logback의 RollingFileAppender 활용&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;[관련 포스트]&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&#034;http://mimul.com/pebble/default/2009/03/26/1238066460000.html&#034;&gt;TOMCAT 로그파일(catalina.out) 일자별로 Rotate하기&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
    
    
    <category>Open Framework</category>
    
    <comments>http://www.mimul.com:80/pebble/default/2009/12/27/1261911840000.html#comments</comments>
    <guid isPermaLink="true">http://www.mimul.com:80/pebble/default/2009/12/27/1261911840000.html</guid>
    <pubDate>Sun, 27 Dec 2009 11:04:00 GMT</pubDate>
  </item>
  
  <item>
    <title>openssl을 활용한 임시 HTTPS 운영</title>
    <link>http://www.mimul.com:80/pebble/default/2009/04/03/1238765460000.html</link>
    
      
        <description>
          &lt;strong&gt;1. openssl 다운&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;- http://www.openssl.org/source/&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2. openssl 컴파일&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;- ./config --prefix=/home/k2/server/openssl-0.9.8e&lt;br /&gt;
&amp;nbsp;- make;make install&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;3. apache 컴파일&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;- ./configure --enable-ssl --with-ssl=/home/k2/server/openssl-0.9.8e 외에 다른 설정 추가함&lt;br /&gt;
&amp;nbsp;- make;make install&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;4. private key 작성&lt;/strong&gt;&lt;br /&gt;
&lt;pre&gt;[mimul]/home/k2/server/httpd-2.0.59/conf/ssl.crt&amp;gt; &lt;br /&gt;    openssl genrsa -des3 -rand T1:T2:T3:T4:T5 1024 &amp;gt; ssl2009.key&lt;br /&gt;0 semi-random bytes loaded&lt;br /&gt;Generating RSA private key, 1024 bit long modulus&lt;br /&gt;....++++++&lt;br /&gt;............++++++&lt;br /&gt;e is 65537 (0x10001)&lt;br /&gt;Enter pass phrase:&lt;br /&gt;Verifying - Enter pass phrase:&lt;br /&gt;&lt;/pre&gt;
&lt;strong&gt;5. CSR 생성&lt;/strong&gt;&lt;br /&gt;
&lt;pre&gt;[mimul]/home/k2/server/httpd-2.0.59/conf/ssl.crt&amp;gt; &lt;br /&gt;  openssl req -new -key ssl2009.key -out ssl2009.csr&lt;br /&gt;Enter pass phrase for ssl2009.key:&lt;br /&gt;You are about to be asked to enter information that will be incorporated&lt;br /&gt;into your certificate request.&lt;br /&gt;What you are about to enter is what is called a Distinguished Name or a DN.&lt;br /&gt;There are quite a few fields but you can leave some blank&lt;br /&gt;For some fields there will be a default value,&lt;br /&gt;If you enter &#039;.&#039;, the field will be left blank.&lt;br /&gt;-----&lt;br /&gt;Country Name (2 letter code) [GB]:KR&lt;br /&gt;State or Province Name (full name) [Berkshire]:Seoul&lt;br /&gt;Locality Name (eg, city) [Newbury]:Dongjak&lt;br /&gt;Organization Name (eg, company) [My Company Ltd]:mimul&lt;br /&gt;Organizational Unit Name (eg, section) []:Service Sience Team&lt;br /&gt;Common Name (eg, your name or your server&#039;s hostname) []:www.mimul.com&lt;br /&gt;Email Address []:pepsi@paran.com&lt;br /&gt;&lt;br /&gt;Please enter the following &#039;extra&#039; attributes&lt;br /&gt;to be sent with your certificate request&lt;br /&gt;A challenge password []:xxxx&lt;br /&gt;An optional company name []:mimul&lt;br /&gt;&lt;/pre&gt;
&lt;strong&gt;6. self-signed certificate 작성&lt;/strong&gt;&lt;br /&gt;
&lt;pre&gt;[mimul]/home/k2/server/httpd-2.0.59/conf/ssl.crt&amp;gt; &lt;br /&gt;  openssl req -x509 -key ssl2009.key -in ssl2009.csr &amp;gt; ssl2009.crt&lt;br /&gt;Enter pass phrase for ssl2009.key:&lt;br /&gt;&lt;br /&gt;[mimul]/home/k2/server/httpd-2.0.59/conf/ssl.crt&amp;gt; ls&lt;br /&gt;ssl2009.crt  ssl2009.csr  ssl2009.key&lt;/pre&gt;
&lt;br /&gt;
&lt;strong&gt;7. httpd.conf에 crt, key 파일 등록&lt;/strong&gt;&lt;br /&gt;
&lt;pre&gt;SSLCertificateFile /home/k2/server/httpd-2.0.59/conf/ssl.crt/ssl2009.crt&lt;br /&gt;SSLCertificateKeyFile /home/k2/server/httpd-2.0.59/conf/ssl.crt/ssl2009.key&lt;br /&gt;&lt;/pre&gt;
&lt;strong&gt;8. Apache 재구동&lt;/strong&gt;&lt;br /&gt;
&lt;pre&gt;[mimul]/home/k2/server/httpd-2.0.59/bin&amp;gt; ./apachectl stop&lt;br /&gt;[mimul]/home/k2/server/httpd-2.0.59/bin&amp;gt; ./apachectl startssl&lt;br /&gt;Apache/2.0.59 mod_ssl/2.0.59 (Pass Phrase Dialog)&lt;br /&gt;Some of your private key files are encrypted for security reasons.&lt;br /&gt;In order to read them you have to provide us with the pass phrases.&lt;br /&gt;&lt;br /&gt;Server mimul.com:443 (RSA)&lt;br /&gt;Enter pass phrase:&lt;br /&gt;&lt;br /&gt;Ok: Pass Phrase Dialog successful.&lt;/pre&gt;
        </description>
      
      
    
    
    
    <category>Security</category>
    
    <category>Open Framework</category>
    
    <comments>http://www.mimul.com:80/pebble/default/2009/04/03/1238765460000.html#comments</comments>
    <guid isPermaLink="true">http://www.mimul.com:80/pebble/default/2009/04/03/1238765460000.html</guid>
    <pubDate>Fri, 03 Apr 2009 13:31:00 GMT</pubDate>
  </item>
  
  <item>
    <title>TOMCAT 로그파일(catalina.out) 일자별로 Rotate하기</title>
    <link>http://www.mimul.com:80/pebble/default/2009/03/26/1238066460000.html</link>
    
      
        <description>
          catalina.out 파일이 무한정 커지는 걸 부담느끼신 분들은 한번 사용하세요.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;1. cronolog 다운로드&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;- wget http://cronolog.org/download/cronolog-1.6.2.tar.gz&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;2. cronolog 컴파일&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;- tar xvfz&amp;nbsp; cronolog-1.6.2.tar.gz &lt;br /&gt;
&amp;nbsp;- /home/k2/data/cronolog-1.6.2&amp;gt;./configure --prefix=/home/k2/bin;make&lt;br /&gt;
&amp;nbsp;- /home/k2/data/cronolog-1.6.2/src&amp;gt;/usr/bin/install -c&amp;nbsp; cronolog /home/k2/bin/cronolog&lt;br /&gt;
&amp;nbsp;- /home/k2/data/cronolog-1.6.2/src&amp;gt;/usr/bin/install -c&amp;nbsp; cronosplit /home/k2/bin/cronosplit&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;3. TOMCAT 설정&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;- vi catalina.sh &lt;br /&gt;
&amp;nbsp;- 아래 내용을 수정해줌&lt;br /&gt;
&lt;pre&gt; org.apache.catalina.startup.Bootstrap &amp;quot;$@&amp;quot; start \&lt;br /&gt;  &amp;gt;&amp;gt; &amp;quot;$CATALINA_BASE&amp;quot;/logs/catalina.out 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;  org.apache.catalina.startup.Bootstrap &amp;quot;$@&amp;quot; start 2&amp;gt;&amp;amp;1 \&lt;br /&gt;  | /home/k2/bin/cronolog /logs/catalina.out.%Y-%m-%d &amp;gt;&amp;gt; /dev/null &amp;amp;&lt;br /&gt;&lt;/pre&gt;
&amp;nbsp;- #touch &amp;quot;$CATALINA_BASE&amp;quot;/logs/catalina.out 추석처리
        </description>
      
      
    
    
    
    <category>Open Framework</category>
    
    <comments>http://www.mimul.com:80/pebble/default/2009/03/26/1238066460000.html#comments</comments>
    <guid isPermaLink="true">http://www.mimul.com:80/pebble/default/2009/03/26/1238066460000.html</guid>
    <pubDate>Thu, 26 Mar 2009 11:21:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Tomcat 프로세스 Alive 프로그램</title>
    <link>http://www.mimul.com:80/pebble/default/2009/01/31/1233412740000.html</link>
    
      
        <description>
          Tomcat이 시그널이나, 어플리케이션 버그 등으로 사망하게 될 경우 자동으로 구동해 주는 프로그램을 만들어보았습니다. 윈도우 기반으로 확인하는 프로그램입니다.&lt;br /&gt;
&lt;pre&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;&lt;br /&gt;public class KeepAliveTomcat {&lt;br /&gt;    public KeepAliveTomcat()&lt;br /&gt;    {&lt;br /&gt;        KeepAlive keepAlive = new KeepAlive();&lt;br /&gt;        keepAlive.start();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public class KeepAlive extends Thread {&lt;br /&gt;        public KeepAlive(){}&lt;br /&gt;        &lt;br /&gt;        public void run() {&lt;br /&gt;        	while(true) {&lt;br /&gt;                try {&lt;br /&gt;                    sleep(10000);&lt;br /&gt;	            } catch (InterruptedException e) {&lt;br /&gt;	            	e.printStackTrace();&lt;br /&gt;	            }&lt;br /&gt;        	}&lt;br /&gt;        }&lt;br /&gt;                &lt;br /&gt;        public void TomcatAlive() {&lt;br /&gt;        	String read = null, tomcat5 = null;&lt;br /&gt;        	boolean isTomcatAlive = false;&lt;br /&gt;        	Process p = null;&lt;br /&gt;        	BufferedReader in = null;&lt;br /&gt;        	&lt;br /&gt;        	try {&lt;br /&gt;        		tomcat5 = &amp;quot;tomcat5.exe&amp;quot;;&lt;br /&gt;        		p = Runtime.getRuntime().exec(&amp;quot;tasklist&amp;quot;);&lt;br /&gt;                         in = new BufferedReader(&lt;br /&gt;                           new InputStreamReader(p.getInputStream()));&lt;br /&gt;                        while ((read = in.readLine()) != null) {&lt;br /&gt;                	   if (read.startsWith(tomcat5)){&lt;br /&gt;                              isTomcatAlive = true;&lt;br /&gt;                	}&lt;br /&gt;                }&lt;br /&gt;                System.out.println(&amp;quot;TomcatAlive : &amp;quot; + isTomcatAlive);&lt;br /&gt;                &lt;br /&gt;                if (!isTomcatAlive)&lt;br /&gt;                        restartTomcat();&lt;br /&gt;        	} catch (Exception e) {&lt;br /&gt;        		e.printStackTrace();&lt;br /&gt;        	}&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        public void restartTomcat() &lt;br /&gt;        {&lt;br /&gt;            try {&lt;br /&gt;                Runtime.getRuntime()&lt;br /&gt;                .exec(&amp;quot;cmd /c C:\\Program Files\\&amp;quot; +&lt;br /&gt;                	&amp;quot;Apache Software Foundation\\Tomcat 5.5\\tomcat5.exe&amp;quot;);&lt;br /&gt;            } catch (Exception e) {&lt;br /&gt;                e.printStackTrace();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;    	new KeepAliveTomcat();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
        </description>
      
      
    
    
    
    <category>Open Framework</category>
    
    <comments>http://www.mimul.com:80/pebble/default/2009/01/31/1233412740000.html#comments</comments>
    <guid isPermaLink="true">http://www.mimul.com:80/pebble/default/2009/01/31/1233412740000.html</guid>
    <pubDate>Sat, 31 Jan 2009 14:39:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>
