※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

TOP

最初はとりあえずTOPにとりとめなく書いていくことにする。

ライブラリ置き場リンク

  • Apache http://www.meisei-u.ac.jp/mirror/apache/httpd/
  • Tomcat http://ftp.kddilabs.jp/infosystems/apache/tomcat/
  • JBossAS http://www.jboss.org/jbossas/
  • Java関係 http://www.oracle.com/technetwork/java/archive-139210.html ※最新以外のJDKはOracle開発者アカウントが必要。

メールサーバ

メールキューを確認
#sendmail
sudo find /var/spool/mqueue/ -type f | wc -l
#Postfix
sudo mailq
メールキューを削除
#sendmail
sudo rm -f /var/spool/mqueue/*
#Postfix
sudo rm -f /var/spool/postfix/deferred/*

MySQL

初期設定
mysql -u root

GRANT ALL PRIVILEGES ON *.* TO hogehoge@"%" IDENTIFIED BY 'passpass' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO hogehoge@localhost IDENTIFIED BY 'passpass' WITH GRANT OPTION;
FLUSH PRIVILEGES;
iptables

CentOSのデフォルトで外部サーバからアクセスできないようになっているので追加。

/sbin/iptables -I INPUT -p tcp -m tcp --dport 3306 --syn -j ACCEPT

Apache

コンパイルオプション
  • 2.0系 http://httpd.apache.org/docs/2.0/ja/programs/configure.html

例:2.0系 (インストールフォルダ=/usr/local/apache2.0)

./configure --prefix=/usr/local/apache2.0 --enable-mods-shared=all --enable-proxy --enable-ssl --enable-cache --enable-disk-cache --enable-mem-cache
  • 2.2系 http://httpd.apache.org/docs/2.2/ja/programs/configure.html

例:2.2系

./configure --enable-mods-shared=all --enable-proxy --enable-proxy-balancer --enable-ssl --enable-cache --enable-disk-cache --enable-mem-cache
mod_cacheディレクティブ例
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
  LoadModule disk_cache_module modules/mod_disk_cache.so
  <IfModule mod_disk_cache.c>
    CacheRoot /var/cache/apache2/
    CacheEnable disk /
    CacheDirLevels 5
    CacheDirLength 3
  </IfModule>
</IfModule>

mod_rewrite

特定のパスにリダイレクトする。

ex) /〜 を /m/〜にリダイレクト

RewriteCond %{REQUEST_URI} !^/m/
RewriteRule ^/(.*)$ /m/$1 [R,L]
DoCoMoのiモードID取得可能にする。
RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|jpeg)$ [NC]
RewriteCond %{QUERY_STRING} !guid=ON
RewriteCond %{QUERY_STRING} !sid=
RewriteCond %{QUERY_STRING} !sSpnm=
RewriteRule ^/(.*)$ /$1?guid=ON [R,L]
mod_proxy_balancer設定例(tomcatクラスタリング)
sticky session使用
ProxyPass / balancer://test/ stickysession=JSESSIONID nofailover=On timeout=2
 <Proxy balancer://test/>
   BalancerMember ajp://192.168.0.11:8009 keepalive=On loadfactor=100 retry=5 route=node01
   BalancerMember ajp://192.168.0.12:8009 keepalive=On loadfactor=100 retry=5 route=node02
 </Proxy>
sticky session未使用
ProxyPass / balancer://test/ nofailover=On timeout=2
 <Proxy balancer://test/>
   BalancerMember ajp://192.168.0.11:8009 keepalive=On loadfactor=100 retry=5 
   BalancerMember ajp://192.168.0.12:8009 keepalive=On loadfactor=100 retry=5 
 </Proxy>
ソースで入れたApacheをアップグレードしたい

基本、最新版ソースを普通にconfigure→make→make installすればOK。confは上書きされない。

mod_cacheでキャッシュされないよ!

Basic認証がかかってるとされないぞ。

パフォーマンスチューニング

以下の項目を見直してみよう。

  • mod_cache、mod_disk_cacheを使う
  • MaxClients接続数を見直す
ログローテーション方法

rolatelogsを使ってローテーションする場合

CustomLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/access_log.%Y%m%d 86400" common
 ErrorLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/error_log.%Y%m%d 86400"

Tomcatインストール後設定

グローバルパラメタ
  • tomcat/bin/setenv.shを作成し、パラメタを追加

例:

CATALINA_OPTS="-server -Xms1024M -Xmx1024M -XX:PermSize=128m -XX:MaxPermSize=256m -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP"

※「-Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP」はWindowsでの機種依存文字対応に使用する。

http://d.hatena.ne.jp/cazzie/20080312/1205329765

サービス化(CentOS5)

バイナリからインストールした場合のサービススクリプト。

以下を/etc/rc.d/init.d/tomcat 以下に置く。

#!/bin/sh
#
# chkconfig: - 80 20
# description: tomcat

# Source function library.
. /etc/init.d/functions

JAVA_HOME=/usr/java/jdk1.6.0_24

CATALINA_HOME=/opt/tomcat
TOMCAT_USER=tomcat
TMP_DIR=/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
PIDFILE=/var/run/tomcat.pid
LOCKFILE=/var/lock/subsys/tomcat
DAEMON=$CATALINA_HOME/bin/jsvc

start(){
    #
    # Start Tomcat
    #
    if [ -z $(/sbin/pidof java) ]; then
        echo "Starting tomcat"
        sudo -u tomcat $CATALINA_HOME/bin/startup.sh
        touch $LOCKFILE
        echo_success
    else
        echo "tomcat already running"
        echo_failure
    fi
    echo ""
}

stop(){
    #
    # Stop Tomcat
    #
    if [ ! -z $(/sbin/pidof java) ]; then
        echo "Shutting down tomcat"
        sudo -u tomcat $CATALINA_HOME/bin/shutdown.sh
        until [ -z $(/sbin/pidof java) ]; do :; done
        rm -f $LOCKFILE
        echo_success
    else
        echo "tomcat not running"
        echo_failure
    fi
    echo ""
}

status() {
    if [ ! -z $(/sbin/pidof java) ]; then
        echo "tomcat already running"
    else
        echo "tomcat not running"
    fi
    echo ""
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    version)
        $CATALINA_HOME/bin/catalina.sh version
        ;;
    *)
        echo $"Usage: tomcat {start|stop|restart|status}"
        exit 1
        ;;
esac
ログローテーション方法

catalina.outは通常ローテーション処理されないため、「/usr/local/tomcat/bin/catalina.sh」を以下のように書き換えて対応する。

1. 以下の行をコメントアウト

変更前

touch "$CATALINA_BASE"/logs/catalina.out

変更後

#touch "$CATALINA_BASE"/logs/catalina.out

2. 以下の行を変更(2箇所ある)

※Apacheのrotatelogsが「/usr/local/apache2/bin」に存在する場合。「540」はロケールを日本時間に合わせるために記述。~

変更前

>> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

変更後

2>&1 | /usr/local/apache2/bin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d 86400 540 &

参考:

http://blog.goo.ne.jp/a24kane2000/e/e84b45ecf07df708cb089c12cbae5994

http://d.hatena.ne.jp/hogem/20080220/1203439193

server.xml AJP Connectorの調整

デフォルトでは設定不足。特にconnectionTimeoutなどは重要!

<Connector port="8009" protocol="AJP/1.3"
             maxThreads="200" minSpareThreads="25" maxSpareThreads="200"
             backlog="100" connectionTimeout="20000"
             enableLookups="false" redirectPort="8443" />

http://www.atmarkit.co.jp/fjava/rensai4/troublehacks06/troublehacks06_3.html

http://tomcat.apache.org/connectors-doc/generic_howto/timeouts.html

IBM Java(J9)について

ダンプファイル

IBMJavaはデフォルトで5分おきにjavacore dumpを出力する模様。

Tomcat起動時などで抑制したい場合は、「-Xdump:none」環境変数を指定して起動するようにする。

Usage:

  -Xdump:help             Print general dump help
  -Xdump:none             Ignore all previous/default dump options
  -Xdump:events           List available trigger events
  -Xdump:request          List additional VM requests
  -Xdump:tokens           List recognized label tokens
  -Xdump:dynamic          Enable support for pluggable agents
  -Xdump:what             Show registered agents on startup

  -Xdump:<type>:help      Print detailed dump help
  -Xdump:<type>:none      Ignore previous dump options of this type
  -Xdump:<type>:defaults  Print/update default settings for this type
  -Xdump:<type>           Request this type of dump (using defaults)

Dump types:

  -Xdump:console          Basic thread dump to stderr
  -Xdump:system           Capture raw process image
  -Xdump:tool             Run command line program
  -Xdump:java             Write application summary
  -Xdump:heap             Capture raw heap image
  -Xdump:snap             Take a snap of the trace buffers

MySQL

レプリケーション時の注意点

my.cnf指定(マスター)

log-bin                   # バイナリログ出力
server-id=1               # マスターサーバのID
expire_logs_days=30       # バイナリログを30日で削除

参考サイト

  • http://wiki.bit-hive.com/tomizoo/pg/MySQL%20%A5%EC%A5%D7%A5%EA%A5%B1%A1%BC%A5%B7%A5%E7%A5%F3%A4%CE%C0%DF%C4%EA
  • http://antas.jp/blog/ina/archives/2007/04/mysql.html

Railsいろいろ

RailsでOracle
  1. アダプタインストール

※標準アダプタではセッションDB格納ができないため、oracle_enhanced-adapterを使用するのが良い。

gem install activerecord-oracle_enhanced-adapter
  1. 注意点

・rake db:resetはつかえない(drop databaseが使えないため)

・テーブル名やインデックス付加の場合の名前などは30文字を超えないように注意


スクリプト

POST(perl)
use Socket;
 $host = "localhost";
 $path = "test/test/";
 $data = "testdata1=test";
 
 socket(SOCKET, PF_INET, SOCK_STREAM, 0);
 connect(SOCKET, pack_sockaddr_in(80, inet_aton($host)));
 select(SOCKET); $|=1; select(STDOUT);
 
 print SOCKET "POST /$path HTTP/1.0\r\n";
 print SOCKET "Content-Length: ".length($data)."\r\n";
 print SOCKET "\r\n";
 print SOCKET $data;
 
 while (<SOCKET>){print $_;}
POST(ruby)
require 'net/http'
 Net::HTTP.version_1_2
 
 host = "localhost"
 port = "80"
 uri = "test/test/"
 param = "test=test1"
 
 Net::HTTP.start(host, port) {|http|
   response = http.post(uri , param)
   puts response.body
 }

vim

コメント行削除(Apacheの設定ファイル等)
:g/^#.*$/d
先頭に空行を含むコメント行削除(Apacheの設定ファイル等)
:g/^ *#.*$/d
空行削除
:g/^$/d

JavaScript

二度押し防止
function doNotDouble(form) {
   var elements = form.elements;
   for (var i = 0; i < elements.length; i++) {
     if (elements[i].type == 'submit') {
       elements[i].disabled = true;
     }
   }
 }
# Viewでこんな感じで指定
 onClick="doNotDouble(form);"