apache(prefork),mod_proxy_balancerの設定値について

  • ProxyPass ディレクティブ
    • timeout
      • Timeoutのデフォルト値が適用される。Timeoutのdefault値は300。backendに接続してからデータの送受信がなかったらタイムアウトとみなす。この場合Clientには502 proxy Errorを返却する。
    • min
      • バックエンドサーバとの接続で 常に開いているコネクション数の最小値。デフォルトは0
    • max
      • プロセスあたりのスレッド数。preforkの場合は常に1
    • smax
      • 1プロセスあたりのbackendとの接続に応じて生成されるコネクションのsoft limit.ttlを超えると切断される。デフォルトはpreforkの場合は1
    • preforkの場合はbackendへの接続本数はmaxclientの値が使われる。

tomcat7 チューニング

  • AJPの設定
    • enableLookups
      • ログを記録する際に生IPかDNSからlookupした名前にするかを決める。遅くなるので基本的にdiabledで。デフォルトはdisabled
    • allowTrace
      • HTTPのTrace Methodを利用できるようにするか否か。TRACEを有効にしておくと攻撃者に余計な情報を与えるため、apachetomcatの前に立っている場合はapache側でtrace methodが効かないようにしておきましょう。デフォルトはfalse
    • useBodyEncodingForURI
      • Tomcat 5.xではGETにより受信したパラメータに対して、setCharacterEncodingメソッドの文字コードを「適用しない」という仕様変更がなされているため、Request.setCharacterEncodingの文字コードをURLに適用するようにするために用いる。デフォルトはfalse。
    • secure
      • request.isSecure()でtrueを返すか否か。cookieのsecure属性がtrueになる。ロードバランサ配下にあるtomcatではSSL用のAJPコネクタを作っておき、secure=trueにしておく。
    • redirectPort
      • redirectPortの設定。response.sendRedirectしたときに設定されるポートを指定する。こちらもロードバランサ配下にあるtomcatではSSL用のAJPコネクタを作っておき、443を返却するようにしておくとよい。
    • scheme
      • このAJPConnectorに対するスキーマ(http / https)の設定。SSL用のAJPコネクタを用意している場合はhttpsにすること。
  • AJPの接続数などの設定
    • maxThreads
      • リクエスト処理スレッド最大数。デフォルトは200
    • minSpareThreads
      • 最小プールサイズ。デフォルトは10
    • connectionTimeout
    • acceptCount
      • 処理できるthreadがすべて利用中である場合の、キューの大きさ。このキューの大きさをも超えるとリクエストがrefuseされる。デフォルトは100

参考

mod_proxy

  • proxyされた先でIP制限
    • apacheA-apacheB-tomcatという構成では、apacheBではソースIPが全てapacheAのIPになってしまう。
    • apacheBではX-Forwarded-ForというヘッダにIPアドレスが格納されているのでこのIPを使ってIP制限を行う方法を紹介する。
SetEnvIf X-Forwarded-For "192\.168\.51\.1" checkip
Order deny,allow
Deny from all
Allow from env=checkip
    • 複数IPを指定する場合は以下のようにしてできました。
SetEnvIf X-Forwarded-For "192\.168\.51\.1" checkip1
SetEnvIf X-Forwarded-For "192\.168\.51\.15" checkip2
Order deny,allow
Deny from all
Allow from env=checkip1
Allow from env=checkip2
    • マスク(/24)で指定した場合は以下のような正規表現で書くことができました。
SetEnvIf X-Forwarded-For "192\.168\.51\.[0-9]{1,3}" checkip
Order deny,allow
Deny from all
Allow from env=checkip

JMX

  • jconsoleの設定方法(tomcatのリソースを確認する方法)
    • VMの起動パラメータを設定します。(catalina.bat)
set JAVA_OPTS=-Dcom.sun.management.jmxremote.authenticate=false
set JAVA_OPTS="%JAVA_OPTS%" -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=8999
      • ここでは認証をしないようにしていますが、ユーザID・PWでの認証が行えます。
    • $JAVA_HOME/bin/jconsoleを起動すれば終了です。
  • プログラムからリソースにアクセスしてみます。
    • VMのパラメータを設定しておけばRMIJMXに接続することが可能です。
public class JmxRmiSample {

	public static void main(String[] args) throws Exception {

		JMXServiceURL u = new JMXServiceURL(
				"service:jmx:rmi:///jndi/rmi://localhost:8999/jmxrmi");
		JMXConnector c = JMXConnectorFactory.connect(u);
		MBeanServerConnection pfServer = c.getMBeanServerConnection();

		OperatingSystemMXBean osbean = ManagementFactory
				.newPlatformMXBeanProxy(pfServer,
						ManagementFactory.OPERATING_SYSTEM_MXBEAN_NAME,
						OperatingSystemMXBean.class);

		System.out.println("Arch = " + osbean.getArch());

	}
}

WindowsServer2008 メモ

  • パフォーマンスモニタ
    • パフォーマンスモニタはtypeperfで取得した値をグラフ化してくれるツールのようだ。【管理ツール】-【パフォーマンス】をクリックすることで画面が表示される。
  • タスクの一覧を表示する
    • tasklist
  • typeperfコマンドの使い方
    • パフォーマンスモニタで取得している値を更に細かく取得したい場合はtypeperfコマンドを利用する。情報を取得できる軸のことをカウンタという。取得するには、typerf -q XXXXで取得する。
    • 誤解を恐れずに言えば、snmpの口が公開されているようなイメージ。
C:\>typeperf -q "Network Interface"
\Network Interface(*)\Bytes Total/sec
\Network Interface(*)\Packets/sec
\Network Interface(*)\Packets Received/sec
\Network Interface(*)\Packets Sent/sec
\Network Interface(*)\Current Bandwidth
\Network Interface(*)\Bytes Received/sec
〜〜〜以下略〜〜〜
    • CPU負荷について確認したいなら、下記のように調べる。
C:\>typeperf -q Processor
\Processor(*)\% Processor Time
〜〜〜以下略〜〜〜

C:\>typeperf "\Processor(*)\% Processor Time"

"(PDH-CSV 4.0)","\\S0902C00058-T1\Processor(0)\% Processor Time","\\S0902C00058-
T1\Processor(1)\% Processor Time","\\S0902C00058-T1\Processor(_Total)\% Processo
r Time"
"01/04/2010 09:26:56.884","0.251526","1.810096","1.030811"
"01/04/2010 09:26:57.886","0.251526","1.810096","1.030811"
"01/04/2010 09:26:58.904","1.786118","3.320710","2.553414"
"01/04/2010 09:26:59.907","0.251526","1.810096","1.030811"
    • typeperfコマンドで取得するデータはデフォルトで1秒おきになっている。これを変更したい場合は -si 5とすることで5秒おきに取得することが可能となる。