月別アーカイブ: 2010年11月

Linux Apacheの設定 [MaxRequestsPerChild]

概要

Web Serverのレスポンスが時間が経つにつれて遅くなる現象に見舞われていた。
でもhttpdをリスタートすると、また早くなる。
そこでmuninをインストールしサーバの状態を監視してみることにした。
その結果、時間経過とともに、iowaitが増え、さらにswapも増えていることが分かった。
レスポンスが遅くなった原因は、おそらく使用メモリが増え続けて、メモリリークのような状態になっていたことだろう。。。
ってことで、apacheの設定をいじって、改善したことをメモ。

MPM(Multi Procesing Module)

  • リクエストの処理部分。
  • preforce, workerなどがある
  • PHPを使うならpreforceがいいとのこと

httpd.confの設定

/etc/httpd/conf/httpd.conf

MPMのpreforkの設定に
MaxRequestsPerChild
がある。
これは、子プロセスが扱うリクエスト数の制限数を設定する。
設定した値までプロセスが存在し続けるようだ。
したがって、メモリの割に大きな値を設定してしまうと、swapの領域までメモリを食い続けてしまうってことらしい。

そこで、この値を少なくすることにした。
とりあえず4000に設定されていたものを1000に変更すると、
swapの領域がかなり減った!!
200とか100に設定している人もいたので、様子を見ながら変更しようと思う。

PHPで作る携帯サイトデベロッパーズガイドを参考に、以下のツールもインストールして速度を向上させた。

Alternative PHP Cache

  • APCと略される
  • PHPのextension
  • 実行コードをキャッシュしてくれる

インストール等は書籍を参考に。。。

これらの設定で、ロード時間も今まで、
最小1秒
だったのが、
最小0.5秒
ぐらいにまで減った。

もっと早くに対策をするべきだった。。。

Netbeans コマンドプロンプトを起動

概要

CakePHPのbakeの機能やgitを使いたい時には、Windows環境の場合コマンドプロンプトを起動することがあると思います。
それを、[Windowsキー] + [R] → cmdとせずにNetbeansから直接起動させる方法です。
eclipseにもあったので、netbeansにはないのかなと思っていたら、pluginにありました。

そんなことして何が嬉しいかというと、

プロンプトを起動したいディレクトリに移動した状態で起動できる

というところです。

環境

  • Windows
  • Netbeans 開発版

正式にリリースされているnetbeansでは、確認していません。。。

準備

  • Netbeansのインストール
  • Run Terminalプラグインのインストール

コマンドプロンプトの起動

  1. 起動したいディレクトリを右クリック
  2. [Tools]->[Run Terminal]

これで右クリックしたディレクトリの位置に移動した状態でプロンプトを開くことが出来ます。

おまけ

CakePHP のbakeの実行

環境変数に/cake/consoleのpathを直接通しておいてもいいけれど、
作っているアプリケーションが変わったり、バージョンが変わったりする度に、
パスを通しなおすのは面倒。。。
かといって、コマンドプロンプトで
set path = %path%;%cd%
などとやって環境変数を毎回設定するのも大変。

ってことで、簡単なbatファイルを作っておいて実行させるようにすればいいかと思います。
appディレクトリに以下のbatファイルを作成して、appディレクトリから実行するだけの簡単なbatファイルです。
※ググれば、もっとちゃんとしたバッチファイルを作っている人がいるかと思います。
/app/bake.bat

@echo off
set path=%path%;%cd%\..\cake\console
cake bake

XamppをC直下にインストールしている状態でphpのパスも通すのであれば、

@echo off
set path=%path%;C:\xampp\php
set path=%path%;%cd%\..\cake\console
cake bake

bake.batの実行

  1. appディレクトリからコマンドプロンプトの実行(デフォルトではShift+Alt+Ctrl+Enterでも可)
  2. bake.batを実行

プロンプトのショートカットは、変更した方が使いやすいと思います。

おまけ2

githubからplugin等をインストール

cygwinのgitをインストールし、
/cygwin/binにpathを通しておけば、gitコマンドも使えるようになるかと思うので、
CakePHPだったら、/plugin or /app/pluginディレクトリからコマンドラインを起動し、

git clone

を実行でOKだと思います。
まだ、ちゃんと確認していませんが。。。^^;

PHP 備忘録:設定

php.iniの設定

strtotime()関数を使用する

date.timezone = “Asia/Tokyo”

php echoの省略の設定

short_open_tag = on

GD関係のインストール

yum -y install gd gd-devel php-gd

DOMのインストール

DOMDocumentを使ってXMLを操作
yum -y install php-xml